/*! * The operator generates a file name based on the log record */ result_type operator() (record_view const& rec) const { boost::log::aux::cleanup_guard< stream_type > cleanup1(m_FormattingStream); boost::log::aux::cleanup_guard< result_type::string_type > cleanup2(m_FileName); m_Formatter(rec, m_FormattingStream); m_FormattingStream.flush(); return result_type(m_FileName); }
result_type operator() (stream_type& strm, value_type const& value) const { strm.flush(); typedef typename stream_type::streambuf_type streambuf_type; string_type& str = *static_cast< streambuf_type* >(strm.rdbuf())->storage(); char_type buf[std::numeric_limits< unsigned int >::digits10 + 2]; char_type* p = buf; typedef karma::uint_generator< unsigned int, 10 > uint_gen; karma::generate(p, uint_gen(), value.line); str.append(buf, p); }
void serialise(stream_type & out) const { IHWT->serialise(out); if ( IHWT->getN() ) for ( int s = IHWT->enctable.minsym; s <= IHWT->enctable.maxsym; ++s ) if ( s > 1 && IHWT->rank(s,IHWT->getN()-1) ) { assert ( C[s].get() ); C[s]->serialize(out); } out.flush(); }
uint64_t createFinalStream(stream_type & out) { flush(); uint64_t p = 0; p += ::libmaus::util::NumberSerialisation::serialiseNumber(out,symbols); // n p += root->serialize(out); // huffman code tree p += ::libmaus::util::NumberSerialisation::serialiseNumber(out,contexts.size()); // number of bit vectors std::vector<uint64_t> nodeposvec; for ( uint64_t i = 0; i < contexts.size(); ++i ) { nodeposvec.push_back(p); uint64_t const blockswritten = contexts[i]->blockswritten; uint64_t const datawordswritten = 6*blockswritten; uint64_t const allwordswritten = 8*blockswritten; contexts[i].reset(); tmpcnt.closeOutputTempFile(i); // bits written p += ::libmaus::serialize::Serialize<uint64_t>::serialize(out,64*datawordswritten); // auto array header (words written) p += ::libmaus::serialize::Serialize<uint64_t>::serialize(out,allwordswritten); //std::string const filename = outputfilenames[i]; //::libmaus::aio::CheckedInputStream istr(filename); std::istream & istr = tmpcnt.openInputTempFile(i); // std::ifstream istr(filename.c_str(),std::ios::binary); // std::cerr << "Copying " << allwordswritten << " from stream " << filename << std::endl; ::libmaus::util::GetFileSize::copy (istr, out, allwordswritten, sizeof(uint64_t)); p += allwordswritten * sizeof(uint64_t); tmpcnt.closeInputTempFile(i); // remove(filename.c_str()); } uint64_t const indexpos = p; p += ::libmaus::util::NumberSerialisation::serialiseNumberVector(out,nodeposvec); p += ::libmaus::util::NumberSerialisation::serialiseNumber(out,indexpos); out.flush(); return p; }
void term() { genc.encode(0); genc.encode(0); genc.flush(); SGO.flush(); SGOout.flush(); indexout.clear(); indexout.seekg(0,std::ios::beg); // uint64_t const indexpos = SGO.getWrittenBytes(); indexout.clear(); indexout.seekg(0,std::ios::beg); libmaus2::util::GetFileSize::copy(indexout,SGOout,2*sizeof(uint64_t)*indexentries); libmaus2::util::NumberSerialisation::serialiseNumber(SGOout,indexentries ? prevkey : 0); // highest key in file libmaus2::util::NumberSerialisation::serialiseNumber(SGOout,indexentries); SGOout.flush(); }