libStatGen Software
1
|
Class for buffering up output reads to ensure that it is sorted. More...
#include <SamCoordOutput.h>
Public Member Functions | |
SamCoordOutput (SamRecordPool &pool) | |
Create an output buffer returning any written records to the specified pool. | |
void | setOutputFile (SamFile *outFile, SamFileHeader *header) |
Set the already opened output file to write to when flushed. | |
bool | add (SamRecord *record) |
Add the specified record to this read buffer. | |
bool | flushAll () |
Flush the entire buffer, writing all records. | |
bool | flush (int32_t chromID, int32_t pos0Based) |
Flush the buffer based on the specified chromosome id/position, writing any records that start at/before the specified chromosome id/position. |
Class for buffering up output reads to ensure that it is sorted.
They are added in almost sorted order. Flush writes any records that start at/before the specified position.
Definition at line 27 of file SamCoordOutput.h.
SamCoordOutput::SamCoordOutput | ( | SamRecordPool & | pool | ) |
Create an output buffer returning any written records to the specified pool.
pool | pool that any written records should be returned to, a pointer to this pool is stored, so it should not go out of scope until the output buffer has written all the records. |
Definition at line 22 of file SamCoordOutput.cpp.
References SamCoordOutput().
Referenced by SamCoordOutput().
: myOutputFile(NULL), myHeader(NULL), myPool(&pool) { }
bool SamCoordOutput::flush | ( | int32_t | chromID, |
int32_t | pos0Based | ||
) |
Flush the buffer based on the specified chromosome id/position, writing any records that start at/before the specified chromosome id/position.
If no output buffer is set, the files cannot be written, but the flushed records are removed/freed. A chromID of -1 will flush everything regardless of pos0Based.
Definition at line 64 of file SamCoordOutput.cpp.
References SamHelper::combineChromPos(), SamRecordPool::releaseRecord(), and SamFile::WriteRecord().
Referenced by flushAll().
{ static std::multimap<uint64_t, SamRecord*>::iterator iter; uint64_t chromPos = SamHelper::combineChromPos(chromID, pos0Based); bool returnVal = true; iter = myReadBuffer.begin(); if((myOutputFile == NULL) || (myHeader == NULL)) { std::cerr << "SamCoordOutput::flush, no output file/header is set, so records removed without being written\n"; returnVal = false; } while((iter != myReadBuffer.end()) && (((*iter).first <= chromPos) || (chromID == -1))) { if((myOutputFile != NULL) && (myHeader != NULL)) { returnVal &= myOutputFile->WriteRecord(*myHeader, *((*iter).second)); } if(myPool != NULL) { myPool->releaseRecord((*iter).second); } else { delete((*iter).second); } ++iter; } // Remove the elements from the begining up to, // but not including the current iterator position. myReadBuffer.erase(myReadBuffer.begin(), iter); return(returnVal); }
bool SamCoordOutput::flushAll | ( | ) |
Flush the entire buffer, writing all records.
If no output buffer is set, the files cannot be written, but the flushed records are removed/freed.
Definition at line 59 of file SamCoordOutput.cpp.
References flush().
{ return(flush(-1,-1)); }
void SamCoordOutput::setOutputFile | ( | SamFile * | outFile, |
SamFileHeader * | header | ||
) |
Set the already opened output file to write to when flushed.
The user should not close/delete the SamFile until this class is done with it. This class does NOT close/delete the SamFile.
outFile | pointer to an already opened (and header written) SAM/BAM output file. |
header | pointer to an already written header that should be used for writing the records. |
Definition at line 38 of file SamCoordOutput.cpp.
{ myOutputFile = outFile; myHeader = header; }