void GzipWriterFilterSupplier::onClosing( DataWriterSupplier* supplier) { if (bamFormat) { closing = true; DataWriter* writer = supplier->getWriter(); // write empty block as BAM end of file marker static _uint8 eof[] = { 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; char* buffer; size_t bytes; if (! (writer->getBuffer(&buffer, &bytes) && bytes >= sizeof(eof))) { WriteErrorMessage("no space to write eof marker\n"); soft_exit(1); } memcpy(buffer, eof, sizeof(eof)); writer->advance(sizeof(eof)); // add final translation for last empty block writer->nextBatch(); char* ignore; pair<_uint64,_uint64> last; size_t used; writer->getBatch(-1, &ignore, NULL, &used, (size_t*) &last.second, NULL, (size_t*) &last.first); last.second += used; translation.push_back(last); writer->close(); delete writer; } // sort translations std::sort(translation.begin(), translation.end(), translationComparator); }
void SimpleReadWriter::close() { writer->close(); }