check block consistency, reset block.end for length that exceeds buffer size (e.g. final CS)
This commit is contained in:
parent
c918746d29
commit
79c1b19e33
@ -104,7 +104,20 @@ namespace imc
|
|||||||
raw_file_ = raw_file;
|
raw_file_ = raw_file;
|
||||||
buffer_ = buffer;
|
buffer_ = buffer;
|
||||||
|
|
||||||
parse_parameters();
|
// make sure "end_" does not exceed buffer size due to invalid "length" parameter of block
|
||||||
|
if ( end_ > buffer_->size() )
|
||||||
|
{
|
||||||
|
std::cout<<"WARNING: invalid length parameter in "<<thekey_.name_<<"-block "
|
||||||
|
<<"(block-end:"<<end_<<",buffer-size:"<<buffer_->size()<<")"
|
||||||
|
<<" => resetting block-end to buffer-size\n";
|
||||||
|
end_ = buffer_->size();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
parse_parameters();
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
throw std::runtime_error("block: failed to parse parameters");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// identify/parse parameters in block
|
// identify/parse parameters in block
|
||||||
@ -158,7 +171,7 @@ namespace imc
|
|||||||
// summarize parameters in single string
|
// summarize parameters in single string
|
||||||
std::string prsstr("{");
|
std::string prsstr("{");
|
||||||
for ( auto par: parameters_ ) prsstr += par.get_info() + std::string(",");
|
for ( auto par: parameters_ ) prsstr += par.get_info() + std::string(",");
|
||||||
prsstr.pop_back();
|
if ( prsstr.size() > 1 ) prsstr.pop_back();
|
||||||
prsstr += std::string("}");
|
prsstr += std::string("}");
|
||||||
|
|
||||||
// construct block info string
|
// construct block info string
|
||||||
|
@ -36,17 +36,17 @@ namespace imc
|
|||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
raw() {};
|
raw() {};
|
||||||
raw(std::string raw_file): raw_file_(raw_file) { this->parse(); };
|
raw(std::string raw_file): raw_file_(raw_file) { this->parse_blocks(); };
|
||||||
|
|
||||||
// provide new raw-file
|
// provide new raw-file
|
||||||
void set_file(std::string raw_file)
|
void set_file(std::string raw_file)
|
||||||
{
|
{
|
||||||
raw_file_ = raw_file;
|
raw_file_ = raw_file;
|
||||||
this->parse();
|
this->parse_blocks();
|
||||||
}
|
}
|
||||||
|
|
||||||
// list all blocks in buffer
|
// list all blocks in buffer
|
||||||
void parse()
|
void parse_blocks()
|
||||||
{
|
{
|
||||||
// open file and put data in buffer
|
// open file and put data in buffer
|
||||||
try {
|
try {
|
||||||
@ -64,7 +64,7 @@ namespace imc
|
|||||||
|
|
||||||
// start parsing raw-blocks in buffer
|
// start parsing raw-blocks in buffer
|
||||||
for ( std::vector<unsigned char>::iterator it=buffer_.begin();
|
for ( std::vector<unsigned char>::iterator it=buffer_.begin();
|
||||||
it!=buffer_.end(); ++it )
|
it!=buffer_.end(); ++it )
|
||||||
{
|
{
|
||||||
// check for "magic byte"
|
// check for "magic byte"
|
||||||
if ( *it == ch_bgn_ )
|
if ( *it == ch_bgn_ )
|
||||||
@ -113,8 +113,10 @@ namespace imc
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw std::runtime_error( std::string("invalid block or corrupt buffer at byte: ")
|
throw std::runtime_error(
|
||||||
+ std::to_string(it+3-buffer_.begin()) );
|
std::string("invalid block or corrupt buffer at byte: ")
|
||||||
|
+ std::to_string(it+3-buffer_.begin())
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -125,6 +127,23 @@ namespace imc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->check_consistency();
|
||||||
|
}
|
||||||
|
|
||||||
|
// check consistency of blocks
|
||||||
|
void check_consistency()
|
||||||
|
{
|
||||||
|
for ( unsigned long int b = 0; b < this->rawblocks_.size()-1; b++ )
|
||||||
|
{
|
||||||
|
if ( this->rawblocks_[b].get_end() >= this->rawblocks_[b+1].get_begin() )
|
||||||
|
{
|
||||||
|
throw std::runtime_error(
|
||||||
|
std::string("inconsistent subsequent blocks:\n")
|
||||||
|
+ std::to_string(b) + std::string("-th block:\n") + this->rawblocks_[b].get_info()
|
||||||
|
+ std::string("\n")
|
||||||
|
+ std::to_string(b+1) + std::string("-th block:\n") + this->rawblocks_[b+1].get_info() );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// get blocks
|
// get blocks
|
||||||
|
@ -1 +1,5 @@
|
|||||||
|CF,2,1,1;|CK,1,3,1,1;|NO,1,16,1,9,imc-FAMOS,0,;|CG,1,5,1,1,1;|CD,1,31,1.000000000000000E+0,1,0,,0,0,0;|NT,1,27, 3,11,1995,21,10,12.0000000; |CC,1,3,1,1;|CP,1,16,1,8,8,64,0,0,1,0;|Cb,1,41,1,0,1,1,0,8,0,8,1,0.000000000000000E+0,0,;|CR,1,11,0,0,0,1,1,V;|CN,1,36,0,0,0,10,Mittelwert,13,Meßreihe 0815; |CT,1,48,0,12,TxBearbeiter,24,E.Mustermann, 23.10.1995,0,; |CS,1,10,1,...ëQ ̧Î^@;
|
|CF,2,1,1;|CK,1,3,1,1;|NO,1,16,1,9,imc-FAMOS,0,;|CG,1,5,1,1,1;
|
||||||
|
|CD,1,31,1.000000000000000E+0,1,0,,0,0,0;|NT,1,27, 3,11,1995,21,10,12.0000000;
|
||||||
|
|CC,1,3,1,1;|CP,1,16,1,8,8,64,0,0,1,0;|Cb,1,41,1,0,1,1,0,8,0,8,1,0.000000000000000E+0,0,;
|
||||||
|
|CR,1,11,0,0,0,1,1,V;|CN,1,36,0,0,0,10,Mittelwert,13,Meßreihe 0815;
|
||||||
|
|CT,1,48,0,12,TxBearbeiter,24,E.Mustermann, 23.10.1995,0,; |CS,1,10,1,...ëQ ̧Î^@;
|
||||||
|
@ -1 +1,16 @@
|
|||||||
|CF,2,1,1;|CK,1,3,1,1;|NO,1,16,1,9,imc-FAMOS,0,;|CB,1,15,1,8,Messung1,0,;|CG,1,5,1,1,1;|CD,1,32,5.000000000000000E-1,1,1,s,0,0,0;|NT,1,27, 3,11,1995,21,24, 2.0000000; |CC,1,3,1,1;|CP,1,15,1,1,1,8,0,0,1,0;|Cb,1,41,1,0,1,1,0,3,0,3,1,3.000000000000000E+0,0,;|CR,1,49,1,3.921568627450980E-2,0.000000000000000E+0,1,1,V;|ND,1,50,-1,-1,-1,0.000000000000000E+0,1.000000000000000E+1;|CN,1,17,1,0,0,6,kanal1,0,;|CG,1,5,1,1,1;|CD,1,31,5.000000000000000E-1,1,0,,0,0,0;|NT,1,27, 3,11,1995,21,24, 6.0000000; |CC,1,3,1,1;|CP,1,15,2,1,1,8,0,0,1,0;|Cb,1,41,1,0,2,1,3,3,0,3,1,3.000000000000000E+0,0,;|CR,1,49,1,3.921568627450980E-2,0.000000000000000E+0,1,1,V;|ND,1,50,-1,-1,-1,0.000000000000000E+0,1.000000000000000E+1;|CN,1,17,1,0,0,6,kanal2,0,;|CS,1,8,1,leclass="Code Example" translate="true">|NO,1,37,1,9, imc-FAMOS,20,Erzeugt:E.Mustermann; |CG,1,5,2,2,2;|CD,1,31,1.000000000000000E-1,1,0,,0,0,0;|NT,1,27,10, 6,1993,19,18,20.0000000; |CC,1,3,1,1;|CP,1,16,1,4,7,32,0,0,1,0;|Cb,1,40,1,0,1,1,0,16,0,16,1,0.000000000000E+0,0,;|CR,1,11,0,0,0,1,1,V;|CN,1,20,0,0,0,9,E06_6_121,0,;|CC,1,3,2,1;|CP,1,16,2,4,5,32,0,0,1,0;|Cb,1,40,1,0,2,1,16,16,0,16,1,0.00000000000E+0,0,;|CR,1,49,1,1.000000024447218E-1,2.139131538569927E-8,1,1,s;|CS,1,34,1,ˆ D@ ƒ@,Ù•@H ¤@*Hh;
|
|CF,2,1,1;|CK,1,3,1,1;|NO,1,16,1,9,imc-FAMOS,0,;|CB,1,15,1,8,Messung1,0,;
|
||||||
|
|CG,1,5,1,1,1;|CD,1,32,5.000000000000000E-1,1,1,s,0,0,0;|NT,1,27, 3,11,1995,21,24, 2.0000000;
|
||||||
|
|CC,1,3,1,1;|CP,1,15,1,1,1,8,0,0,1,0;|Cb,1,41,1,0,1,1,0,3,0,3,1,3.000000000000000E+0,0,;
|
||||||
|
|CR,1,49,1,3.921568627450980E-2,0.000000000000000E+0,1,1,V;
|
||||||
|
|ND,1,50,-1,-1,-1,0.000000000000000E+0,1.000000000000000E+1;|CN,1,17,1,0,0,6,kanal1,0,;
|
||||||
|
|CG,1,5,1,1,1;|CD,1,31,5.000000000000000E-1,1,0,,0,0,0;|NT,1,27, 3,11,1995,21,24, 6.0000000;
|
||||||
|
|CC,1,3,1,1;|CP,1,15,2,1,1,8,0,0,1,0;|Cb,1,41,1,0,2,1,3,3,0,3,1,3.000000000000000E+0,0,;
|
||||||
|
|CR,1,49,1,3.921568627450980E-2,0.000000000000000E+0,1,1,V;
|
||||||
|
|ND,1,50,-1,-1,-1,0.000000000000000E+0,1.000000000000000E+1;|CN,1,17,1,0,0,6,kanal2,0,;
|
||||||
|
|CS,1,8,1,leclass="Code Example" translate="true">
|
||||||
|
|NO,1,37,1,9, imc-FAMOS,20,Erzeugt:E.Mustermann; |CG,1,5,2,2,2;
|
||||||
|
|CD,1,31,1.000000000000000E-1,1,0,,0,0,0;|NT,1,27,10, 6,1993,19,18,20.0000000;
|
||||||
|
|CC,1,3,1,1;|CP,1,16,1,4,7,32,0,0,1,0;|Cb,1,40,1,0,1,1,0,16,0,16,1,0.000000000000E+0,0,;
|
||||||
|
|CR,1,11,0,0,0,1,1,V;|CN,1,20,0,0,0,9,E06_6_121,0,;|CC,1,3,2,1;|CP,1,16,2,4,5,32,0,0,1,0;
|
||||||
|
|Cb,1,40,1,0,2,1,16,16,0,16,1,0.00000000000E+0,0,;
|
||||||
|
|CR,1,49,1,1.000000024447218E-1,2.139131538569927E-8,1,1,s;|CS,1,34,1,ˆ D@ ƒ@,Ù•@H ¤@*Hh;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user