//This functions recognizes only numbers with digits, plus sign, minus sign, decimal point, e, or E. Hexadecimal and pointers not currently supported. bool isNumeric(const QuickString &str) { for (int i=0; i < (int)str.size(); i++) { char currChar = str[i]; if (!(isdigit(currChar) || currChar == '-' || currChar == '.' || currChar == '+' || currChar == 'e' || currChar == 'E')) { return false; } } return true; }
bool QuickString::stricmp(const QuickString &str) const { if (str.size() != _currSize) { return true; } for (size_t i=0; i < _currSize; i++) { if (tolower(str[i]) != tolower(_buffer[i])) { return true; } } return false; }
bool ContextBase::parseIoBufSize(QuickString bufStr) { char lastChar = bufStr[bufStr.size()-1]; int multiplier = 1; if (!isdigit(lastChar)) { switch (lastChar) { case 'K': multiplier = 1 << 10; break; case 'M': multiplier = 1 << 20; break; case 'G': multiplier = 1 << 30; break; default: _errorMsg = "\n***** ERROR: Unrecognized memory buffer size suffix \'"; _errorMsg += lastChar; _errorMsg += "\' given. *****"; return false; break; } //lop off suffix character bufStr.resize(bufStr.size()-1); } if (!isNumeric(bufStr)) { _errorMsg = "\n***** ERROR: argument passed to -iobuf is not numeric. *****"; return false; } _ioBufSize = str2chrPos(bufStr) * multiplier; if (_ioBufSize < MIN_ALLOWED_BUF_SIZE) { _errorMsg = "\n***** ERROR: specified buffer size is too small. *****"; return false; } return true; }
bool BufferedStreamMgr::getTypeData() { QuickString currScanBuffer; _inputStreamMgr->getSavedData(currScanBuffer); do { if (!_typeChecker.scanBuffer(currScanBuffer.c_str(), currScanBuffer.size()) && !_typeChecker.needsMoreData()) { return false; } else if (_typeChecker.needsMoreData()) { _inputStreamMgr->populateScanBuffer(); currScanBuffer.clear(); _inputStreamMgr->getSavedData(currScanBuffer); } } while (_typeChecker.needsMoreData()); _inputStreamMgr->reset(); return true; }
void QuickString<quickSize>::swap(QuickString<quickSize>& str) { /* Cannot swap if they are not of the same OneString type */ if(str.size() > quickSize) { ioc << cat_error << ta_bold << fg_red << "OneStringBase Error" << ": The OneStringBase argument is too large to" << " swap with" <<io_end; } else { /* Swap the values */ QuickString<quickSize> temp = *this; *this = str; str = temp; } }
bool BufferedStreamMgr::getLine(QuickString &line) { line.clear(); if (_mainBufCurrStartPos >= _mainBufCurrLen) { if (!readFileChunk()) { _eof = true; return false; } } bool retVal = true; while (1) { int searchPos = _mainBufCurrStartPos; while (searchPos < _mainBufCurrLen && _mainBuf[searchPos] != '\n') { searchPos++; } line.append((char *)_mainBuf + _mainBufCurrStartPos, searchPos - _mainBufCurrStartPos); _mainBufCurrStartPos = searchPos +1; if (searchPos == _mainBufCurrLen) { //hit end of buffer, but no newline yet if (!readFileChunk()) { //hit eof retVal = true; break; } } else if (_mainBuf[searchPos] == '\n') { retVal = true; break; } } //strip any whitespace characters, such as DOS newline characters or extra tabs, //from the end of the line int lastPos = line.size(); while (isspace(line[lastPos-1])) lastPos--; line.resize(lastPos); return retVal; }
int str2chrPos(const QuickString &str) { return str2chrPos(str.c_str(), str.size()); }