integrate imc::object into parsing workflow
This commit is contained in:
parent
4f3e816dbf
commit
eb2c49549a
@ -37,14 +37,14 @@ namespace imc
|
||||
// w.r.t. to first byte of block (=0)
|
||||
std::vector<imc::parameter> parameters_;
|
||||
|
||||
// particular imc object
|
||||
// particular imc object represented by this block
|
||||
imc::rawobject imc_object_;
|
||||
|
||||
public:
|
||||
|
||||
// constructor
|
||||
block(key thekey, unsigned long int begin, unsigned long int end,
|
||||
std::string raw_file, std::vector<unsigned char>* buffer):
|
||||
std::string raw_file, const std::vector<unsigned char>* buffer):
|
||||
thekey_(thekey)
|
||||
{
|
||||
if ( keys.count(thekey.name_) != 1 ) throw std::logic_error("unknown key");
|
||||
@ -68,11 +68,14 @@ namespace imc
|
||||
|
||||
try {
|
||||
parse_parameters();
|
||||
parse_object();
|
||||
} catch (const std::exception& e) {
|
||||
throw std::runtime_error("block: failed to parse parameters");
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
// identify/parse parameters in block
|
||||
void parse_parameters()
|
||||
{
|
||||
@ -94,6 +97,14 @@ namespace imc
|
||||
parameters_.back().end( this->end_ - 1 );
|
||||
}
|
||||
|
||||
// pass buffer and parameters associated to block to generate corres. object
|
||||
void parse_object()
|
||||
{
|
||||
imc_object_.parse(thekey_,buffer_,parameters_);
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
// access members
|
||||
imc::key get_key() { return thekey_; }
|
||||
unsigned long int get_begin() { return begin_; }
|
||||
@ -119,7 +130,7 @@ namespace imc
|
||||
}
|
||||
|
||||
// get info string
|
||||
std::string get_info(int width = 20)
|
||||
std::string get_info(bool include_object = true, int width = 20)
|
||||
{
|
||||
// summarize parameters in single string
|
||||
std::string prsstr("{");
|
||||
@ -129,12 +140,22 @@ namespace imc
|
||||
|
||||
// construct block info string
|
||||
std::stringstream ss;
|
||||
ss<<std::setw(width)<<std::left<<"block-key:"<<thekey_.name_<<"\n"
|
||||
ss<<std::setw(width)<<std::left<<"block:"<<thekey_.name_
|
||||
<<" ("<<thekey_.description_<<")"<<"\n"
|
||||
<<std::setw(width)<<std::left<<"begin:"<<begin_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"end:"<<end_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"rawfile:"<<raw_file_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"buffersize:"<<buffer_->size()<<"\n"
|
||||
<<std::setw(width)<<std::left<<"parameters:"<<prsstr<<"\n";
|
||||
|
||||
// include meta data of specific object
|
||||
if ( include_object )
|
||||
{
|
||||
ss<<std::setfill('-')<<std::left<<std::setw(60)<<""<<std::setfill(' ')<<"\n";
|
||||
// ss<<thekey_.description_<<"\n";
|
||||
ss<<imc_object_.get_info()<<"\n";
|
||||
}
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@ namespace imc
|
||||
std::stringstream ss;
|
||||
ss<<std::setw(width)<<std::left<<"critical:"<<(critical_?"yes":"no")<<"\n"
|
||||
<<std::setw(width)<<std::left<<"name:"<<name_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"decription:"<<description_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"description:"<<description_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"version:"<<version_<<"\n";
|
||||
return ss.str();
|
||||
}
|
||||
@ -65,7 +65,7 @@ namespace imc
|
||||
{"CD", key(true,"CD","abscissa description",2)},
|
||||
{"CZ", key(true,"CZ","scaling of z-axis",1)},
|
||||
{"CC", key(true,"CC","start of component",1)},
|
||||
{"CP", key(true,"CP","buffer, datatype and samples of component ",1)},
|
||||
{"CP", key(true,"CP","buffer, datatype and samples of component",1)},
|
||||
{"Cb", key(true,"Cb","buffer description",1)},
|
||||
{"CR", key(true,"CR","permissible range of values in component",1)},
|
||||
{"CN", key(true,"CN","name and comment of channel",1)},
|
||||
|
@ -9,6 +9,30 @@
|
||||
|
||||
namespace imc
|
||||
{
|
||||
// format and processor (corresponds to key CF)
|
||||
struct format
|
||||
{
|
||||
int fileformat_;
|
||||
int processor_;
|
||||
|
||||
// construct members by parsing particular parameters from buffer
|
||||
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter> parameters)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
format(): fileformat_(-1), processor_(-1) {}
|
||||
|
||||
// get info string
|
||||
std::string get_info(int width = 20)
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss<<std::setw(width)<<std::left<<"format:"<<fileformat_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"processor:"<<processor_<<"\n";
|
||||
return ss.str();
|
||||
}
|
||||
};
|
||||
|
||||
// start of group of keys (corresponds to key CK)
|
||||
struct keygroup
|
||||
{
|
||||
@ -52,7 +76,7 @@ namespace imc
|
||||
std::stringstream ss;
|
||||
ss<<std::setw(width)<<std::left<<"group-index:"<<group_index_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"name:"<<name_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"comment_:"<<comment_<<"\n";
|
||||
<<std::setw(width)<<std::left<<"comment:"<<comment_<<"\n";
|
||||
return ss.str();
|
||||
}
|
||||
};
|
||||
@ -78,7 +102,7 @@ namespace imc
|
||||
ss<<std::setw(width)<<std::left<<"group-index:"<<group_index_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"name:"<<name_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"text:"<<text_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"comment_:"<<comment_<<"\n";
|
||||
<<std::setw(width)<<std::left<<"comment:"<<comment_<<"\n";
|
||||
return ss.str();
|
||||
}
|
||||
};
|
||||
@ -111,7 +135,7 @@ namespace imc
|
||||
std::stringstream ss;
|
||||
ss<<std::setw(width)<<std::left<<"#components:"<<number_components_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"fieldtype:"<<fldtype_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"dimension_:"<<dimension_<<"\n";
|
||||
<<std::setw(width)<<std::left<<"dimension:"<<dimension_<<"\n";
|
||||
return ss.str();
|
||||
}
|
||||
};
|
||||
@ -347,7 +371,7 @@ namespace imc
|
||||
std::stringstream ss;
|
||||
ss<<std::setw(width)<<std::left<<"origin:"<<(origin_?"verrechnet":"Original")<<"\n"
|
||||
<<std::setw(width)<<std::left<<"generator:"<<generator_<<"\n"
|
||||
<<std::setw(width)<<std::left<<"comment_:"<<comment_<<"\n";
|
||||
<<std::setw(width)<<std::left<<"comment:"<<comment_<<"\n";
|
||||
return ss.str();
|
||||
}
|
||||
};
|
||||
@ -378,88 +402,149 @@ namespace imc
|
||||
namespace imc {
|
||||
|
||||
// create wrapper for imc_object types
|
||||
// (not particular memory-efficient but it simplifies the remaining stuff
|
||||
// considerable and the structs are pretty small anyway! )
|
||||
// (not particularly memory-efficient but it simplifies the remaining stuff
|
||||
// considerably and the structs are pretty small anyway!)
|
||||
class rawobject
|
||||
{
|
||||
keygroup kyg_; // 0
|
||||
group grp_; // 1
|
||||
text txt_; // 2
|
||||
datafield dtf_; // 3
|
||||
abscissa abs_; // 4
|
||||
component cmt_; // 5
|
||||
packaging pkg_; // 6
|
||||
buffer bfr_; // 7
|
||||
range rng_; // 8
|
||||
channel chn_; // 9
|
||||
data dat_; // 10
|
||||
origin_data org_; // 11
|
||||
triggertime trt_; // 12
|
||||
format fmt_; // 0
|
||||
keygroup kyg_; // 1
|
||||
group grp_; // 2
|
||||
text txt_; // 3
|
||||
datafield dtf_; // 4
|
||||
abscissa abs_; // 5
|
||||
component cmt_; // 6
|
||||
packaging pkg_; // 7
|
||||
buffer bfr_; // 8
|
||||
range rng_; // 9
|
||||
channel chn_; // 10
|
||||
data dat_; // 11
|
||||
origin_data org_; // 12
|
||||
triggertime trt_; // 13
|
||||
int objidx_;
|
||||
|
||||
public:
|
||||
|
||||
rawobject(): objidx_(-1) { }
|
||||
|
||||
void parse(imc::key key, const std::vector<unsigned char>* buffer,
|
||||
const std::vector<parameter> parameters)
|
||||
const std::vector<parameter>& parameters)
|
||||
{
|
||||
if ( key.name_ == std::string("CK") )
|
||||
if ( key.name_ == std::string("CF") )
|
||||
{
|
||||
fmt_.parse(buffer,parameters);
|
||||
objidx_ = 0;
|
||||
}
|
||||
else if ( key.name_ == std::string("CK") )
|
||||
{
|
||||
kyg_.parse(buffer,parameters);
|
||||
objidx_ = 1;
|
||||
}
|
||||
else if ( key.name_ == std::string("CB") )
|
||||
{
|
||||
grp_.parse(buffer,parameters);
|
||||
objidx_ = 2;
|
||||
}
|
||||
else if ( key.name_ == std::string("CT") )
|
||||
{
|
||||
txt_.parse(buffer,parameters);
|
||||
objidx_ = 3;
|
||||
}
|
||||
else if ( key.name_ == std::string("CG") )
|
||||
{
|
||||
dtf_.parse(buffer,parameters);
|
||||
objidx_ = 4;
|
||||
}
|
||||
else if ( key.name_ == std::string("CD") && key.version_ == 1 )
|
||||
{
|
||||
abs_.parse(buffer,parameters);
|
||||
objidx_ = 5;
|
||||
}
|
||||
else if ( key.name_ == std::string("CC") )
|
||||
{
|
||||
cmt_.parse(buffer,parameters);
|
||||
objidx_ = 6;
|
||||
}
|
||||
else if ( key.name_ == std::string("CP") )
|
||||
{
|
||||
cmt_.parse(buffer,parameters);
|
||||
objidx_ = 7;
|
||||
}
|
||||
else if ( key.name_ == std::string("Cb") )
|
||||
{
|
||||
bfr_.parse(buffer,parameters);
|
||||
objidx_ = 8;
|
||||
}
|
||||
else if ( key.name_ == std::string("CR") )
|
||||
{
|
||||
rng_.parse(buffer,parameters);
|
||||
objidx_ = 9;
|
||||
}
|
||||
else if ( key.name_ == std::string("CN") )
|
||||
{
|
||||
chn_.parse(buffer,parameters);
|
||||
objidx_ = 10;
|
||||
}
|
||||
else if ( key.name_ == std::string("CS") )
|
||||
{
|
||||
dat_.parse(buffer,parameters);
|
||||
objidx_ = 11;
|
||||
}
|
||||
else if ( key.name_ == std::string("NO") )
|
||||
{
|
||||
org_.parse(buffer,parameters);
|
||||
objidx_ = 12;
|
||||
}
|
||||
else if ( key.name_ == std::string("NT") )
|
||||
{
|
||||
trt_.parse(buffer,parameters);
|
||||
objidx_ = 13;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw std::logic_error(
|
||||
std::string("unsupported block associated to key ") + key.name_
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// provide info string
|
||||
std::string get_info(int width = 20)
|
||||
{
|
||||
switch (objidx_) {
|
||||
case 0:
|
||||
return fmt_.get_info();
|
||||
case 1:
|
||||
return kyg_.get_info();
|
||||
case 2:
|
||||
return grp_.get_info();
|
||||
case 3:
|
||||
return txt_.get_info();
|
||||
case 4:
|
||||
return dtf_.get_info();
|
||||
case 5:
|
||||
return abs_.get_info();
|
||||
case 6:
|
||||
return cmt_.get_info();
|
||||
case 7:
|
||||
return pkg_.get_info();
|
||||
case 8:
|
||||
return bfr_.get_info();
|
||||
case 9:
|
||||
return rng_.get_info();
|
||||
case 10:
|
||||
return chn_.get_info();
|
||||
case 11:
|
||||
return dat_.get_info();
|
||||
case 12:
|
||||
return org_.get_info();
|
||||
case 13:
|
||||
return trt_.get_info();
|
||||
default:
|
||||
return std::string("");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
@ -114,7 +114,7 @@ namespace imc
|
||||
}
|
||||
unsigned long length = std::stoul(leng);
|
||||
|
||||
// declare corresponding key and block
|
||||
// declare and initialize corresponding key and block
|
||||
imc::key bkey( *(it+1)==imc::key_crit_ , newkey,
|
||||
imc::keys.at(newkey).description_, version );
|
||||
imc::block blk(bkey,it-buffer_.begin(),
|
||||
@ -165,14 +165,7 @@ namespace imc
|
||||
}
|
||||
}
|
||||
|
||||
// // extract imc objects
|
||||
// void list_keygroup()
|
||||
// {
|
||||
// for ( auto &blk: this->rawblocks_ )
|
||||
// {
|
||||
// if ( blk.get_key().name_ == std::string("CK") )
|
||||
// }
|
||||
// }
|
||||
// parse channel's raw data
|
||||
|
||||
public:
|
||||
|
||||
@ -194,15 +187,6 @@ namespace imc
|
||||
return cplxcnt_;
|
||||
}
|
||||
|
||||
// collect meta data
|
||||
void parse_meta()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
// parse channel's raw data
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -173,7 +173,7 @@ int main(int argc, char* argv[])
|
||||
// list blocks
|
||||
for ( imc::block blk: imcraw.blocks() )
|
||||
{
|
||||
std::cout<<blk.get_key().get_info()<<"\n";
|
||||
// std::cout<<blk.get_key().get_info()<<"\n";
|
||||
std::cout<<blk.get_info()<<"\n";
|
||||
}
|
||||
std::cout<<"number of blocks: "<<imcraw.blocks().size()<<"\n";
|
||||
|
Loading…
x
Reference in New Issue
Block a user