#include "RecordMgr.h" #include "FreeList.h" RecordMgr::RecordMgr(FileRecordTypeChecker::RECORD_TYPE recType, int blockSize) : _recordType(recType), _freeList(NULL), _freeListBlockSize(blockSize) { switch(_recordType) { case FileRecordTypeChecker::EMPTY_RECORD_TYPE: { _freeList = new FreeList(0); break; } case FileRecordTypeChecker::BED3_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } case FileRecordTypeChecker::BED4_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } case FileRecordTypeChecker::BED5_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } case FileRecordTypeChecker::BEDGRAPH_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } case FileRecordTypeChecker::BED6_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } case FileRecordTypeChecker::BED_PLUS_RECORD_TYPE: case FileRecordTypeChecker::BED6_PLUS_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } case FileRecordTypeChecker::BED12_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } case FileRecordTypeChecker::BAM_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } case FileRecordTypeChecker::VCF_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } case FileRecordTypeChecker::GFF_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } case FileRecordTypeChecker::GFF_PLUS_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } case FileRecordTypeChecker::NO_POS_PLUS_RECORD_TYPE: { _freeList = new FreeList(_freeListBlockSize); break; } default: break; } } RecordMgr::~RecordMgr() { switch(_recordType) { case FileRecordTypeChecker::EMPTY_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::BED3_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::BED4_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::BED5_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::BEDGRAPH_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::BED6_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::BED_PLUS_RECORD_TYPE: case FileRecordTypeChecker::BED6_PLUS_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::BED12_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::BAM_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::VCF_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::GFF_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::GFF_PLUS_RECORD_TYPE: { delete (FreeList *)_freeList; break; } case FileRecordTypeChecker::NO_POS_PLUS_RECORD_TYPE: { delete (FreeList *)_freeList; break; } default: break; } } Record *RecordMgr::allocateRecord() { Record *record = NULL; switch(_recordType) { case FileRecordTypeChecker::EMPTY_RECORD_TYPE: { EmptyRecord *er = ((FreeList *)_freeList)->newObj(); record = er; break; } case FileRecordTypeChecker::BED3_RECORD_TYPE: { Bed3Interval *b3i = ((FreeList *)_freeList)->newObj(); record = b3i; break; } case FileRecordTypeChecker::BED4_RECORD_TYPE: { Bed4Interval *b4i = ((FreeList *)_freeList)->newObj(); record = b4i; break; } case FileRecordTypeChecker::BED5_RECORD_TYPE: { Bed5Interval *b5i = ((FreeList *)_freeList)->newObj(); record = b5i; break; } case FileRecordTypeChecker::BEDGRAPH_RECORD_TYPE: { BedGraphInterval *bgi = ((FreeList *)_freeList)->newObj(); record = bgi; break; } case FileRecordTypeChecker::BED6_RECORD_TYPE: { Bed6Interval *b6i = ((FreeList *)_freeList)->newObj(); record = b6i; break; } case FileRecordTypeChecker::BED_PLUS_RECORD_TYPE: case FileRecordTypeChecker::BED6_PLUS_RECORD_TYPE: { BedPlusInterval *bPi = ((FreeList *)_freeList)->newObj(); if (_recordType == FileRecordTypeChecker::BED6_PLUS_RECORD_TYPE) { bPi->setNumFixedFields(6); } record = bPi; break; } case FileRecordTypeChecker::BED12_RECORD_TYPE: { Bed12Interval *b12i = ((FreeList *)_freeList)->newObj(); record = b12i; break; } case FileRecordTypeChecker::BAM_RECORD_TYPE: { BamRecord *bamRec = ((FreeList *)_freeList)->newObj(); record = bamRec; break; } case FileRecordTypeChecker::VCF_RECORD_TYPE: { VcfRecord *vcfRec = ((FreeList *)_freeList)->newObj(); record = vcfRec; break; } case FileRecordTypeChecker::GFF_RECORD_TYPE: { GffRecord *gfr = ((FreeList *)_freeList)->newObj(); record = gfr; break; } case FileRecordTypeChecker::GFF_PLUS_RECORD_TYPE: { GffPlusRecord *gfpr = ((FreeList *)_freeList)->newObj(); record = gfpr; break; } case FileRecordTypeChecker::NO_POS_PLUS_RECORD_TYPE: { NoPosPlusRecord *nppr = ((FreeList *)_freeList)->newObj(); record = nppr; break; } default: break; } return record; } void RecordMgr::deleteRecord(const Record *record) { switch(_recordType) { case FileRecordTypeChecker::EMPTY_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::BED3_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::BED4_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::BED5_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::BEDGRAPH_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::BED6_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::BED_PLUS_RECORD_TYPE: case FileRecordTypeChecker::BED6_PLUS_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::BED12_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::BAM_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::VCF_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::GFF_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::GFF_PLUS_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } case FileRecordTypeChecker::NO_POS_PLUS_RECORD_TYPE: { ((FreeList *)_freeList)->deleteObj(static_cast(record)); break; } default: break; } }