//---------------------------------------------------------------------------// #ifndef IMCCHANNEL #define IMCCHANNEL #include #include "imc_datatype.hpp" //---------------------------------------------------------------------------// namespace imc { // collect uuid's of blocks required for full channel reconstruction struct channel_env { // define unique identifer for channel_env std::string uuid_; // collect affiliate blocks for a single channel std::string CBuuid_, CGuuid_, CCuuid_, CNuuid_; std::string CDuuid_, CTuuid_, Cbuuid_, CPuuid_, CRuuid_, CSuuid_; std::string NTuuid_, NOuuid_; // reset all members void reset() { uuid_.clear(); CBuuid_.clear(); CGuuid_.clear(); CCuuid_.clear(); CNuuid_.clear(); CDuuid_.clear(); CTuuid_.clear(); Cbuuid_.clear(); CPuuid_.clear(); CRuuid_.clear(); CSuuid_.clear(); NTuuid_.clear(); NOuuid_.clear(); } // get info std::string get_info(int width = 20) { std::stringstream ss; ss< std::string joinvec(std::vector
myvec, unsigned long int limit = 10) { std::stringstream ss; ss<<"["; if ( myvec.size() <= limit ) { for ( dt el: myvec ) ss< 1 ) sumstr.pop_back(); sumstr += std::string("]"); return sumstr; } // channel struct channel { // associated environment of blocks and map of blocks channel_env chnenv_; const std::map* blocks_; // collect meta-data of channels according to env, // just everything valueable in here std::string uuid_; std::string name_, comment_, origin_, text_; std::string yname_, yunit_; std::string xname_, xunit_; double xstepwidth_; // buffer and data int signbits_, num_bytes_; // unsigned long int byte_offset_; unsigned long int buffer_offset_, buffer_size_; int datatp_; imc::datatype dattyp_; std::vector ydata_; std::vector xdata_; // range, factor and offset double factor_, offset_; // group reference the channel belongs to int group_index_; std::string group_uuid_, group_name_, group_comment_; // constructor takes channel's block environment channel(channel_env chnenv, std::map* blocks): chnenv_(chnenv), blocks_(blocks), group_index_(-1) { // declare list of block parameters std::vector prms; // use uuid from CN block uuid_ = chnenv_.CNuuid_; // extract associated CB data if ( blocks->count(chnenv_.CBuuid_) == 1 ) { prms = blocks->at(chnenv_.CBuuid_).get_parameters(); group_index_ = std::stoi(blocks->at(chnenv_.CBuuid_).get_parameter(prms[2])); group_name_ = blocks->at(chnenv_.CBuuid_).get_parameter(prms[4]); group_comment_ = blocks->at(chnenv_.CBuuid_).get_parameter(prms[6]); } // extract associated CT data if ( blocks->count(chnenv_.CTuuid_) == 1 ) { prms = blocks->at(chnenv_.CTuuid_).get_parameters(); text_ = blocks->at(chnenv_.CTuuid_).get_parameter(prms[4]) + std::string(" - ") + blocks->at(chnenv_.CTuuid_).get_parameter(prms[6]) + std::string(" - ") + blocks->at(chnenv_.CTuuid_).get_parameter(prms[8]); } // extract associated CD data if ( blocks->count(chnenv_.CDuuid_) == 1 ) { prms = blocks->at(chnenv_.CDuuid_).get_parameters(); xstepwidth_ = std::stod(blocks->at(chnenv_.CDuuid_).get_parameter(prms[2])); xunit_ = blocks->at(chnenv_.CDuuid_).get_parameter(prms[5]); // TODO xname_ = std::string("time"); } // extract associated CP data if ( blocks->count(chnenv_.CPuuid_) == 1 ) { prms = blocks->at(chnenv_.CPuuid_).get_parameters(); datatp_ = std::stoi(blocks->at(chnenv_.CPuuid_).get_parameter(prms[3])); num_bytes_ = std::stoi(blocks->at(chnenv_.CPuuid_).get_parameter(prms[4])); signbits_ = std::stoi(blocks->at(chnenv_.CPuuid_).get_parameter(prms[5])); // byte_offset_ = std::stoul(blocks->at(chnenv_.CPuuid_).get_parameter(prms[7])); } // extract associated Cb data if ( blocks->count(chnenv_.Cbuuid_) == 1 ) { prms = blocks->at(chnenv_.Cbuuid_).get_parameters(); buffer_offset_ = std::stoul(blocks->at(chnenv_.Cbuuid_).get_parameter(prms[6])); buffer_size_ = std::stoul(blocks->at(chnenv_.Cbuuid_).get_parameter(prms[7])); } // extract associated CR data if ( blocks->count(chnenv_.CRuuid_) == 1 ) { prms = blocks->at(chnenv_.CRuuid_).get_parameters(); factor_ = std::stod(blocks->at(chnenv_.CRuuid_).get_parameter(prms[3])); offset_ = std::stod(blocks->at(chnenv_.CRuuid_).get_parameter(prms[4])); yunit_ = blocks->at(chnenv_.CRuuid_).get_parameter(prms[7]); } // extract associated CN data if ( blocks->count(chnenv_.CNuuid_) == 1 ) { prms = blocks->at(chnenv_.CNuuid_).get_parameters(); name_ = blocks->at(chnenv_.CNuuid_).get_parameter(prms[6]); yname_ = name_; comment_ = blocks->at(chnenv_.CNuuid_).get_parameter(prms[8]); // group_index_ = std::stoi(blocks->at(chnenv_.CNuuid_).get_parameter(prms[2])); } } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<(ydata_)<<"\n" <(xdata_)<<"\n" <(ydata_) <<"\",\"xdata\":\""<(xdata_) <<"\",\"aff. blocks\":\""<