Пример #1
0
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;
}
Пример #2
0
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;
}