bool BufferedStreamMgr::getLine(QuickString &line) { line.clear(); if (_mainBufCurrStartPos >= _mainBufCurrLen) { if (!readFileChunk()) { _eof = true; return false; } } 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 return true; } } else if (_mainBuf[searchPos] == '\n') { 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 NewGenomeFile::loadGenomeFileIntoMap() { ifstream genFile(_genomeFileName.c_str()); if (!genFile.good()) { cerr << "Error: Can't open genome file" << _genomeFileName << "Exiting..." << endl; exit(1); } string sLine; Tokenizer fieldTokens; CHRPOS chrSize = 0; QuickString chrName; while (!genFile.eof()) { sLine.clear(); chrSize = 0; chrName.clear(); getline(genFile, sLine); int numFields = fieldTokens.tokenize(sLine.c_str()); if (numFields != 2) { continue; } chrName = fieldTokens.getElem(0); chrSize = str2chrPos(fieldTokens.getElem(1)); _maxId++; _chromSizeIds[chrName] = pair<CHRPOS, int>(chrSize, _maxId); _startOffsets.push_back(_genomeLength); _genomeLength += chrSize; _chromList.push_back(chrName); } if (_maxId == -1) { cerr << "Error: The genome file " << _genomeFileName << " has no valid entries. Exiting." << endl; exit(1); } // Special: BAM files can have unmapped reads, which show as no chromosome, or an empty chrom string. // Add in an empty chrom so these don't error. _maxId++; _chromSizeIds[""] = pair<CHRPOS, int>(0, _maxId); _chromList.push_back(""); _startOffsets.push_back(_genomeLength); //insert the final length as the last element //to help with the lower_bound call in the projectOnGenome method. genFile.close(); }
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; }