9#include <boost/tokenizer.hpp>
12#include "GaudiKernel/System.h"
31 bool isPrimitive(
const std::type_info& ti ) {
33 if( ( ti ==
typeid(
char* ) ) ||
34 ( ti ==
typeid(
char ) ) ||
35 ( ti ==
typeid(
unsigned char ) ) ||
36 ( ti ==
typeid(
short ) ) ||
37 ( ti ==
typeid(
unsigned short ) ) ||
38 ( ti ==
typeid(
int ) ) ||
39 ( ti ==
typeid(
unsigned int ) ) ||
40 ( ti ==
typeid(
float ) ) ||
41 ( ti ==
typeid(
double ) ) ||
42 ( ti ==
typeid(
long long ) ) ||
43 ( ti ==
typeid(
unsigned long long ) ) ||
44 ( ti ==
typeid(
bool ) ) ) {
76 if (&parent !=
this) {
111 const std::type_info& ti,
113 std::string_view docstring,
121 <<
"Specified variable name (" <<
name <<
") doesn't have the "
122 <<
"expected prefix (" <<
m_prefix <<
")";
123 return StatusCode::RECOVERABLE;
134 return StatusCode::SUCCESS;
138 var.setType( System::typeinfoName( ti.name() ) );
141 var.setPrimitive( isPrimitive( ti ) );
144 var.setDoc( docstring );
149 return StatusCode::SUCCESS;
159 const std::type_info& ,
166 <<
"addDimensionedVariable(...) not implemented";
168 return StatusCode::FAILURE;
195 static size_t objectCounter = 0;
196 std::string name = m_name;
199 name =
"D3PDObject" + std::to_string( objectCounter );
201 return name +
"_" + genSuffix (name, RANDOM_NAME_POSTFIX_LENGTH);
216 return metaName.substr( 0, metaName.size() -
259 std::set< Variable >::const_iterator itr =
m_variables.begin();
260 std::set< Variable >::const_iterator end =
m_variables.end();
261 for( ; itr != end; ++itr ) {
283 boost::keep_empty_tokens );
284 boost::tokenizer< boost::char_separator< char > > tokens( data,
286 boost::tokenizer< boost::char_separator< char > >
::const_iterator itr = tokens.begin();
287 boost::tokenizer< boost::char_separator< char > >
::const_iterator end = tokens.end();
292 <<
"The received data can not be parsed successfully: "
294 return StatusCode::FAILURE;
302 <<
"Version mismatch! The metadata was saved with a different "
303 <<
"serialization version (" << *itr <<
") than the code used ("
305 return StatusCode::FAILURE;
313 <<
"The received data can not be parsed successfully: "
315 return StatusCode::FAILURE;
324 <<
"The received data can not be parsed successfully: "
326 return StatusCode::FAILURE;
332 }
else if( *itr ==
"1" ) {
336 <<
"The received data can not be parsed successfully: "
338 return StatusCode::FAILURE;
344 for( ; itr != end; ++itr ) {
346 CHECK( var.read( *itr ) );
350 return StatusCode::SUCCESS;
366 return this->
merge( obj );
379 if(
name() != obj.name() ) {
381 <<
"Can't merge object with name \"" << obj.name()
382 <<
"\" into another object with name \"" <<
name() <<
"\"";
387 std::set< Variable >::const_iterator itr = obj.variables().begin();
388 std::set< Variable >::const_iterator end = obj.variables().end();
389 for( ; itr != end; ++itr ) {
413 static std::unordered_map<std::string, size_t> namecount;
415 const size_t count = ++namecount[name];
416 std::ostringstream os;
417 os << std::setw(
length) << std::setprecision(
length) << std::setfill(
'0')
502 boost::keep_empty_tokens );
503 boost::tokenizer< boost::char_separator< char > > tokens( data,
505 boost::tokenizer< boost::char_separator< char > >
::const_iterator itr = tokens.begin();
508 if( itr == tokens.end() ) {
510 <<
"The received data can not be parsed successfully: "
512 return StatusCode::FAILURE;
519 if( itr == tokens.end() ) {
521 <<
"The received data can not be parsed successfully: "
523 return StatusCode::FAILURE;
530 if( itr == tokens.end() ) {
532 <<
"The received data can not be parsed successfully: "
534 return StatusCode::FAILURE;
541 if( itr == tokens.end() ) {
543 <<
"The received data can not be parsed successfully: "
545 return StatusCode::FAILURE;
551 }
else if( *itr ==
"1" ) {
555 <<
"The received data can not be parsed successfully: "
557 return StatusCode::FAILURE;
560 return StatusCode::SUCCESS;
565 return ( (
name() == var.name() ) &&
566 (
type() == var.type() ) );
571 if(
name() != var.name() ) {
572 return (
name() < var.name() );
574 return (
type() < var.type() );
587 return result += obj2;
Helpers for checking error return status codes and reporting errors.
#define REPORT_MESSAGE_WITH_CONTEXT(LVL, CONTEXT_NAME)
Report a message, with an explicitly specified context name.
#define CHECK(...)
Evaluate an expression and check for errors.
int count(std::string s, const std::string ®x)
count how many occurances of a regx are in a string
Block filler tool for noisy FEB information.
StatusCode DummyInitAlg::initialize ATLAS_NOT_THREAD_SAFE()
Standard Gaudi initialize method.
ObjectMetadata operator+(const ObjectMetadata &obj1, const ObjectMetadata &obj2)
Operator for creating the sum of two metadata objects.