bool FileRecordMgr::open(){ _bufStreamMgr = new BufferedStreamMgr(_filename); if (_ioBufSize > 0) _bufStreamMgr->setIoBufSize(_ioBufSize); if (!_bufStreamMgr->init()) { cerr << "Error: unable to open file or unable to determine types for file " << _filename << endl; delete _bufStreamMgr; _bufStreamMgr = NULL; exit(1); } _fileType = _bufStreamMgr->getTypeChecker().getFileType(); _recordType = _bufStreamMgr->getTypeChecker().getRecordType(); if (_fileType == FileRecordTypeChecker::UNKNOWN_FILE_TYPE || _recordType == FileRecordTypeChecker::UNKNOWN_RECORD_TYPE) { cerr << "Error: Unable to determine type for file " << _filename << endl; delete _bufStreamMgr; _bufStreamMgr = NULL; exit(1); } allocateFileReader(); _recordMgr = new RecordMgr(_recordType, _freeListBlockSize); _fileReader->setFileName(_filename.c_str()); _fileReader->setInputStream(_bufStreamMgr); if (!_fileReader->open()) { cerr << "Error: Types determined but can't open file " << _filename << endl; delete _bufStreamMgr; _bufStreamMgr = NULL; exit(1); } return true; }
bool FileRecordMgr::open(){ _filename = _context->getInputFileName(_contextFileIdx); _bufStreamMgr = new BufferedStreamMgr(_filename); if (!_bufStreamMgr->init()) { cerr << "Error: unable to open file or unable to determine types for file " << _filename << endl; delete _bufStreamMgr; _bufStreamMgr = NULL; exit(1); } _fileType = _bufStreamMgr->getTypeChecker().getFileType(); _recordType = _bufStreamMgr->getTypeChecker().getRecordType(); if (_fileType == FileRecordTypeChecker::UNKNOWN_FILE_TYPE || _recordType == FileRecordTypeChecker::UNKNOWN_RECORD_TYPE) { cerr << "Error: Unable to determine type for file " << _filename << endl; delete _bufStreamMgr; _bufStreamMgr = NULL; exit(1); } allocateFileReader(); _recordMgr = new RecordMgr(_recordType, _freeListBlockSize); _fileReader->setFileName(_filename.c_str()); _fileReader->setInputStream(_bufStreamMgr); if (!_fileReader->open()) { cerr << "Error: Types determined but can't open file " << _filename << endl; delete _bufStreamMgr; _bufStreamMgr = NULL; exit(1); } _context->setInputFileType(_contextFileIdx, _fileType); _context->setInputRecordType(_contextFileIdx, _recordType); //if this is a database file, and the numFields is greater than the numFields in other DB files, update. // TBD: This is one of many things that will need to be changed to support multiple database files in future versions. int numFields = _bufStreamMgr->getTypeChecker().getNumFields(); if (_context->hasIntersectMethods()) { if (_contextFileIdx == (static_cast<ContextIntersect *>(_context))->getDatabaseFileIdx() && numFields > (static_cast<ContextIntersect *>(_context))->getMaxNumDatabaseFields()) { (static_cast<ContextIntersect *>(_context))->setMaxNumDatabaseFields(numFields); } } if (_fileType == FileRecordTypeChecker::BAM_FILE_TYPE) { _context->setHeader(_contextFileIdx, _fileReader->getHeader()); _context->setReferences(_contextFileIdx, static_cast<BamFileReader *>(_fileReader)->getReferences()); _headerSet = true; } return true; }