Record *FileRecordMgr::allocateAndGetNextRecord() { if (!_fileReader->isOpen()) { return NULL; } if (!_fileReader->readEntry()) { return NULL; } if (!_headerSet && _fileReader->hasHeader()) { _context->setHeader(_contextFileIdx, _fileReader->getHeader()); _headerSet = true; } Record *record = NULL; record = _recordMgr->allocateRecord(); if (!record->initFromFile(_fileReader)) { _recordMgr->deleteRecord(record); return NULL; } // In the rare case of Bam records where both the read and it's mate failed to map, // Ignore the record. Delete and return null if (!(record->isUnmapped() && record->isMateUnmapped())) { if (!record->coordsValid()) { cerr << "Error: Invalid record in file " << _filename << ". Record is " << endl << *record << endl; exit(1); } //test for sorted order, if necessary. if (_context->getSortedInput()) { testInputSortOrder(record); } } assignChromId(record); _totalRecordLength += (unsigned long)(record->getEndPos() - record->getStartPos()); return record; }
Record *FileRecordMgr::getNextRecord(RecordKeyList *keyList) { if (!_fileReader->isOpen()) { return NULL; } if (!_fileReader->readEntry()) { return NULL; } Record *record = NULL; record = _recordMgr->allocateRecord(); if (!record->initFromFile(_fileReader)) { _recordMgr->deleteRecord(record); return NULL; } // If the record is unmapped, don't test for valid coords or sort order, // but still return it so the -v (noHit) option and the like will still // see it. if (!record->isUnmapped()) { if (!record->coordsValid()) { cerr << "Error: Invalid record in file " << _filename << ". Record is " << endl << *record << endl; exit(1); } //test for sorted order, if necessary. if (_isSortedInput) { testInputSortOrder(record); } } assignChromId(record); _totalRecordLength += (unsigned long)(record->getEndPos() - record->getStartPos()); if (keyList != NULL) { keyList->setKey(record); } return record; }