diff --git a/.gitignore b/.gitignore index 8ab811e..3cce848 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ cython/*.cpp tdmtermite dist/ *.egg-info/ +output/ +monitor-process.sh diff --git a/lib/tdm_termite.cpp b/lib/tdm_termite.cpp index c66587d..73b7f6f 100644 --- a/lib/tdm_termite.cpp +++ b/lib/tdm_termite.cpp @@ -16,6 +16,12 @@ tdm_termite::tdm_termite(std::string tdmfile, std::string tdxfile, bool showlog) this->process_tdm(showlog); } +tdm_termite::~tdm_termite() +{ + // close tdx-file stream + tdx_ifstream_.close(); +} + void tdm_termite::submit_files(std::string tdmfile, std::string tdxfile, bool showlog) { // save files @@ -106,20 +112,26 @@ void tdm_termite::process_tdm(bool showlog) this->process_localcolumns(showlog,xml_doc); // open .tdx and stream all binary data into buffer + // try { + // std::ifstream fin(tdxfile_.c_str(),std::ifstream::binary); + // // if ( !fin.good() ) std::cerr<<"failed to open .tdx-file\n"; + // + // std::vector tdxbuf((std::istreambuf_iterator(fin)), + // (std::istreambuf_iterator())); + // tdxbuffer_ = tdxbuf; + // + // if ( showlog ) std::cout<<"size of .tdx buffer (bytes): "< tdxbuf((std::istreambuf_iterator(fin)), - (std::istreambuf_iterator())); - tdxbuffer_ = tdxbuf; - - if ( showlog ) std::cout<<"size of .tdx buffer (bytes): "< tdm_termite::get_channel(std::string& id) // declare buffer covering the required range of "tdxbuffer_" // (consider both channel-wise and block-wise ordering) unsigned long int strtidx = blk.block_offset_*blk.block_size_ - + blk.byte_offset_, - fnshidx = strtidx + blk.length_*dtyp.size_; - std::vector tdxblk( tdxbuffer_.begin()+strtidx, - tdxbuffer_.begin()+fnshidx ); + + blk.byte_offset_; + // fnshidx = strtidx + blk.length_*dtyp.size_; + // std::vector tdxblk( tdxbuffer_.begin()+strtidx, + // tdxbuffer_.begin()+fnshidx ); + char* blkbuf = new char[blk.length_*dtyp.size_]; + try { + tdx_ifstream_.seekg(strtidx); + tdx_ifstream_.read(blkbuf,blk.length_*dtyp.size_); + } catch (const std::exception& e) { + throw std::runtime_error( std::string("failed to read block from tdx_ifstream_: ") + + e.what() ); + } + std::vector tdxblk(blkbuf,blkbuf+blk.length_*dtyp.size_); + delete []blkbuf; // distinguish numeric datatypes included in "tdmdatatype" if ( blk.value_type_ == std::string("eInt16Usi") ) diff --git a/lib/tdm_termite.hpp b/lib/tdm_termite.hpp index f035ebe..abd10e7 100644 --- a/lib/tdm_termite.hpp +++ b/lib/tdm_termite.hpp @@ -60,8 +60,9 @@ class tdm_termite std::map submatrices_; std::map localcolumns_; - // binary data container + // binary data container/file stream std::vector tdxbuffer_; + std::ifstream tdx_ifstream_; // extract list of identifiers from e.g. "#xpointer(id("usi12") id("usi13"))" std::vector extract_ids(std::string idstring) @@ -121,6 +122,7 @@ public: tdm_termite(); tdm_termite(std::string tdmfile, std::string tdxfile = std::string(""), bool showlog = false); + ~tdm_termite(); // provide (tdm,tdx) files void submit_files(std::string tdmfile, std::string tdxfile = std::string(""),