|
Gaudi Framework, version v21r9 |
| Home | Generated: 3 May 2010 |


Public Member Functions | |
| CounterSvc (const std::string &name, ISvcLocator *svcLoc) | |
| Standard Constructor. | |
| virtual | ~CounterSvc () |
| Standard destructor. | |
| virtual StatusCode | finalize () |
| Finalization. | |
| virtual Counter * | get (const std::string &group, const std::string &name) const |
| Access an existing counter object. | |
| virtual ICounterSvc::Counters | get (const std::string &group) const |
| get all counters form the given group: | |
| virtual StatusCode | create (const std::string &group, const std::string &name, longlong initial_value, Counter *&refpCounter) |
| Create a new counter object. | |
| virtual CountObject | create (const std::string &group, const std::string &name, longlong initial_value=0) |
| Create a new counter object. | |
| virtual StatusCode | remove (const std::string &group, const std::string &name) |
| Remove a counter object. | |
| virtual StatusCode | remove (const std::string &group) |
| Remove all counters of a given group. | |
| virtual StatusCode | remove () |
| Remove all known counter objects. | |
| virtual StatusCode | print (const std::string &group, const std::string &name, Printout &printer) const |
| Print counter value. | |
| virtual StatusCode | print (const std::string &group, Printout &printer) const |
| If no such counter exists the return code is COUNTER_NOT_PRESENT Note: This call is not direct access. | |
| virtual StatusCode | print (const Counter *pCounter, Printout &printer) const |
| Print counter value. | |
| virtual StatusCode | print (const CountObject &pCounter, Printout &printer) const |
| Print counter value. | |
| virtual StatusCode | print (Printout &printer) const |
| virtual StatusCode | defaultPrintout (MsgStream &log, const Counter *pCounter) const |
| Default Printout for counters. | |
| void | print () const |
| "standard" printout a'la GaudiCommon | |
Private Types | |
| typedef GaudiUtils::HashMap < std::string, Counter * > | NameMap |
| typedef GaudiUtils::HashMap < std::string, NameMap > | CountMap |
Private Member Functions | |
| std::pair< std::string, std::string > | _find (const Counter *c) const |
| size_t | num () const |
Private Attributes | |
| CountMap | m_counts |
| the actual map of counters | |
| bool | m_print |
| boolean flag to print statistics | |
| std::string | m_header |
| the header row | |
| std::string | m_format1 |
| format for regular statistical printout rows | |
| std::string | m_format2 |
| format for "efficiency" statistical printout rows | |
| bool | m_useEffFormat |
| flag to use the special "efficiency" format | |
Definition at line 27 of file CounterSvc.cpp.
typedef GaudiUtils::HashMap<std::string,Counter*> CounterSvc::NameMap [private] |
Definition at line 216 of file CounterSvc.cpp.
typedef GaudiUtils::HashMap<std::string,NameMap> CounterSvc::CountMap [private] |
Definition at line 217 of file CounterSvc.cpp.
| CounterSvc::CounterSvc | ( | const std::string & | name, | |
| ISvcLocator * | svcLoc | |||
| ) | [inline] |
Standard Constructor.
Definition at line 30 of file CounterSvc.cpp.
00032 : base_class(name, svcLoc) 00033 , m_counts () 00034 , m_print ( true ) 00035 // 00036 // the header row 00037 , m_header ( " Counter :: Group | # | sum | mean/eff^* | rms/err^* | min | max |") 00038 // format for regular statistical printout rows 00039 , m_format1 ( " %|15.15s|%|-15.15s|%|32t||%|10d| |%|11.7g| |%|#11.5g| |%|#11.5g| |%|#12.5g| |%|#12.5g| |" ) 00040 // format for "efficiency" statistical printout rows 00041 , m_format2 ( "*%|15.15s|%|-15.15s|%|32t||%|10d| |%|11.5g| |(%|#9.7g| +- %|-#9.7g|)%%| ------- | ------- |" ) 00042 // flag to use the special "efficiency" format 00043 , m_useEffFormat ( true ) 00044 // 00045 { 00046 declareProperty ("PrintStat" , m_print ) ; 00047 // 00048 declareProperty 00049 ( "StatTableHeader" , m_header , 00050 "The header row for the output Stat-table" ) ; 00051 // 00052 declareProperty 00053 ( "RegularRowFormat" , m_format1 , 00054 "The format for the regular row in the output Stat-table" ) ; 00055 // 00056 declareProperty 00057 ( "EfficiencyRowFormat" , m_format2 , 00058 "The format for the regular row in the outptu Stat-table" ) ; 00059 // 00060 declareProperty 00061 ( "UseEfficiencyRowFormat" , m_useEffFormat , 00062 "Use the special format for printout of efficiency counters" ) ; 00063 }
| virtual CounterSvc::~CounterSvc | ( | ) | [inline, virtual] |
| virtual StatusCode CounterSvc::finalize | ( | void | ) | [inline, virtual] |
Finalization.
< finalize the base class
Reimplemented from Service.
Definition at line 67 of file CounterSvc.cpp.
00068 { 00069 if ( outputLevel() <= MSG::DEBUG || m_print ) { print () ; } 00070 remove().ignore() ; 00071 // finalize the base class 00072 return Service::finalize() ; 00073 }
| CounterSvc::Counter * CounterSvc::get | ( | const std::string & | group, | |
| const std::string & | name | |||
| ) | const [virtual] |
Access an existing counter object.
| group | [IN] Hint for smart printing | |
| name | [IN] Counter name |
Implements ICounterSvc.
Definition at line 239 of file CounterSvc.cpp.
00241 { 00242 CountMap::const_iterator i = m_counts.find ( grp ) ; 00243 if ( m_counts.end() == i ) { return 0 ; } // RETURN 00244 NameMap::const_iterator j = i->second.find ( nam ) ; 00245 if ( i->second.end() == j ) { return 0 ; } // RETURN 00246 return j->second ; // RETURN 00247 }
| ICounterSvc::Counters CounterSvc::get | ( | const std::string & | group | ) | const [virtual] |
get all counters form the given group:
Implements ICounterSvc.
Definition at line 251 of file CounterSvc.cpp.
00252 { 00253 ICounterSvc::Counters result ; 00254 CountMap::const_iterator i = m_counts.find ( group ) ; 00255 if ( m_counts.end() == i ) { return result ; } // RETURN 00256 for ( NameMap::const_iterator j = i->second.begin() ; i->second.end() != j ; ++j ) 00257 { result.push_back( CountObject ( j->second, i->first , j->first ) ) ; } 00258 return result ; 00259 }
| StatusCode CounterSvc::create | ( | const std::string & | group, | |
| const std::string & | name, | |||
| longlong | initial_value, | |||
| Counter *& | refpCounter | |||
| ) | [virtual] |
Create a new counter object.
If the counter object exists already the existing object is returned. In this event the return code is COUNTER_EXISTS. The ownership of the actual counter stays with the service.
| group | [IN] Hint for smart printing | |
| name | [IN] Counter name | |
| initial_value | [IN] Initial counter value | |
| refpCounter | [OUT] Reference to store pointer to counter. |
Implements ICounterSvc.
Definition at line 269 of file CounterSvc.cpp.
00273 { 00274 // try to find existing counter: 00275 refpCounter = get ( grp , nam ) ; 00276 if ( 0 != refpCounter ) { return COUNTER_EXISTS ; } // RETURN 00277 // create the new counter 00278 Counter* newc = new Counter() ; 00279 refpCounter = newc ; 00280 if ( 0 != initial_value ) { 00281 refpCounter->addFlag ( static_cast<double>(initial_value) ) ; // icc remark #2259 00282 } 00283 // find a proper group 00284 CountMap::iterator i = m_counts.find ( grp ) ; 00285 // (create a group if needed) 00286 if ( m_counts.end() == i ) 00287 { i = m_counts.insert ( std::make_pair ( grp , NameMap() ) ).first ; } 00288 // insert new counter with proper name into proper group: 00289 i->second.insert( std::make_pair( nam , newc ) ).first ; 00290 return StatusCode::SUCCESS ; // RETURN 00291 }
| CounterSvc::CountObject CounterSvc::create | ( | const std::string & | group, | |
| const std::string & | name, | |||
| longlong | initial_value = 0 | |||
| ) | [virtual] |
Create a new counter object.
If the counter object exists already, a std::runtime_error exception is thrown. The ownership of the actual counter stays with the service.
| group | [IN] Hint for smart printing | |
| name | [IN] Counter name | |
| initial_value | [IN] Initial counter value | |
| refpCounter | [OUT] Reference to store pointer to counter. |
Implements ICounterSvc.
Definition at line 300 of file CounterSvc.cpp.
00303 { 00304 Counter* p = 0; 00305 StatusCode sc = create ( group, name, initial_value, p ) ; 00306 if ( sc.isSuccess() && 0 != p ) { return CountObject ( p , group , name ) ; } 00307 throw std::runtime_error("CounterSvc::Counter('"+group+"::"+name+"') exists already!"); 00308 }
| StatusCode CounterSvc::remove | ( | const std::string & | group, | |
| const std::string & | name | |||
| ) | [virtual] |
Remove a counter object.
If the counter object does not exists, the return code is COUNTER_NOT_PRESENT. The counter may not be used anymore after this call.
| group | [IN] Hint for smart printing | |
| name | [IN] Counter name | |
| initial_value | [IN] Initial counter value | |
| refpCounter | [OUT] Reference to store pointer to counter. |
Implements ICounterSvc.
Definition at line 313 of file CounterSvc.cpp.
00315 { 00316 CountMap::iterator i = m_counts.find ( grp ) ; 00317 if ( m_counts.end() == i ) { return COUNTER_NOT_PRESENT ; } // RETURN 00318 NameMap::iterator j = i->second.find ( nam ) ; 00319 if ( i->second.end() == j ) { return COUNTER_NOT_PRESENT ; } // RETURN 00320 delete j->second ; 00321 i->second.erase ( j ) ; 00322 return StatusCode::SUCCESS ; 00323 }
| StatusCode CounterSvc::remove | ( | const std::string & | group | ) | [virtual] |
Remove all counters of a given group.
If no such counter exists the return code is COUNTER_NOT_PRESENT
| group | [IN] Hint for smart printing |
Implements ICounterSvc.
Definition at line 327 of file CounterSvc.cpp.
00328 { 00329 CountMap::iterator i = m_counts.find ( grp ) ; 00330 if ( m_counts.end() == i ) { return COUNTER_NOT_PRESENT ; } // RETURN 00331 for ( NameMap::iterator j = i->second.begin() ; i->second.end() != j ; ++j ) 00332 { delete j->second ; } 00333 i->second.clear() ; 00334 return StatusCode::SUCCESS ; 00335 }
| StatusCode CounterSvc::remove | ( | ) | [virtual] |
Remove all known counter objects.
Definition at line 339 of file CounterSvc.cpp.
00340 { 00341 // remove group by group 00342 for ( CountMap::iterator i = m_counts.begin() ; m_counts.end() != i ; ++i ) 00343 { remove ( i->first ).ignore () ; } 00344 m_counts.clear() ; 00345 return StatusCode::SUCCESS; 00346 }
| StatusCode CounterSvc::print | ( | const std::string & | group, | |
| const std::string & | name, | |||
| Printout & | printer | |||
| ) | const [virtual] |
Print counter value.
| group | [IN] Hint for smart printing | |
| name | [IN] Counter name | |
| printer | [IN] Print actor |
Implements ICounterSvc.
Definition at line 351 of file CounterSvc.cpp.
00354 { 00355 const Counter* c = get( grp , nam ) ; 00356 if ( 0 == c ) { return COUNTER_NOT_PRESENT ; } // RETURN 00357 // create the stream and use it! 00358 MsgStream log ( msgSvc() , name() ) ; 00359 return printer ( log , c ) ; 00360 }
| StatusCode CounterSvc::print | ( | const std::string & | group, | |
| Printout & | printer | |||
| ) | const [virtual] |
If no such counter exists the return code is COUNTER_NOT_PRESENT Note: This call is not direct access.
| group | [IN] Hint for smart printing | |
| printer | [IN] Print actor |
Implements ICounterSvc.
Definition at line 382 of file CounterSvc.cpp.
00384 { 00385 CountMap::const_iterator i = m_counts.find ( grp ) ; 00386 if ( m_counts.end() == i ) { return COUNTER_NOT_PRESENT ; } 00387 00388 MsgStream log(msgSvc(), name()); 00389 // Force printing in alphabetical order 00390 typedef std::map<std::string, Counter*> sorted_map_t; 00391 sorted_map_t sorted_map(i->second.begin(), i->second.end()); 00392 std::for_each(sorted_map.begin(), sorted_map.end(), 00393 conditionalPrint(printer, log)); 00394 return StatusCode::SUCCESS; // RETURN 00395 }
| StatusCode CounterSvc::print | ( | const Counter * | pCounter, | |
| Printout & | printer | |||
| ) | const [virtual] |
Print counter value.
| pCounter | [IN] Pointer to Counter object | |
| printer | [IN] Print actor |
Implements ICounterSvc.
Definition at line 400 of file CounterSvc.cpp.
| StatusCode CounterSvc::print | ( | const CountObject & | pCounter, | |
| Printout & | printer | |||
| ) | const [virtual] |
Print counter value.
| refCounter | [IN] Reference to CountObject object | |
| printer | [IN] Print actor |
Implements ICounterSvc.
Definition at line 410 of file CounterSvc.cpp.
| StatusCode CounterSvc::print | ( | Printout & | printer | ) | const [virtual] |
| printer | [IN] Print actor |
Implements ICounterSvc.
Definition at line 416 of file CounterSvc.cpp.
00417 { 00418 MsgStream log ( msgSvc() , name() ) ; 00419 // Force printing in alphabetical order 00420 typedef std::map<std::pair<std::string,std::string>, Counter*> sorted_map_t; 00421 sorted_map_t sorted_map; 00422 for ( CountMap::const_iterator i = m_counts.begin(); i != m_counts.end(); ++i ) 00423 { 00424 for ( NameMap::const_iterator j = i->second.begin() ; i->second.end() != j ; ++j ) 00425 { 00426 sorted_map[std::make_pair(i->first, j->first)] = j->second; 00427 } 00428 } 00429 std::for_each(sorted_map.begin(), sorted_map.end(), 00430 conditionalPrint(printer, log)); 00431 return StatusCode::SUCCESS; 00432 }
| StatusCode CounterSvc::defaultPrintout | ( | MsgStream & | log, | |
| const Counter * | pCounter | |||
| ) | const [virtual] |
Default Printout for counters.
Implements ICounterSvc.
Definition at line 437 of file CounterSvc.cpp.
00439 { 00440 if ( 0 == c ) { return StatusCode::FAILURE ; } 00441 std::pair<std::string,std::string> p = _find ( c ) ; 00442 00443 log << MSG::ALWAYS 00444 << CountObject( const_cast<Counter*>(c) , p.first , p.second ) 00445 << endmsg ; 00446 00447 return StatusCode::SUCCESS; 00448 }
| std::pair<std::string,std::string> CounterSvc::_find | ( | const Counter * | c | ) | const [inline, private] |
Definition at line 189 of file CounterSvc.cpp.
00190 { 00191 if ( 0 == c ) { return std::pair<std::string,std::string>() ; } 00192 for ( CountMap::const_iterator i = m_counts.begin() ; m_counts.end() != i ; ++i ) 00193 { 00194 for ( NameMap::const_iterator j = i->second.begin() ; i->second.end() != j ; ++j ) 00195 { if ( j->second == c ) { return std::make_pair( i->first , j->first ) ; } } 00196 } 00197 return std::pair<std::string,std::string>() ; 00198 }
| size_t CounterSvc::num | ( | ) | const [inline, private] |
Definition at line 200 of file CounterSvc.cpp.
00201 { 00202 size_t result = 0 ; 00203 { 00204 for ( CountMap::const_iterator i = m_counts.begin(); i != m_counts.end(); ++i ) 00205 { 00206 for ( NameMap::const_iterator j = i->second.begin() ; i->second.end() != j ; ++j ) 00207 { if ( 0 != j->second ) { ++result ; } ; } 00208 } 00209 } 00210 return result ; 00211 }
| void CounterSvc::print | ( | ) | const |
"standard" printout a'la GaudiCommon
Definition at line 452 of file CounterSvc.cpp.
00453 { 00454 MsgStream log ( msgSvc() , name() ) ; 00455 // number of counters 00456 const size_t _num = num() ; 00457 if ( 0 != _num ) 00458 { 00459 log << MSG::ALWAYS 00460 << "Number of counters : " << _num << endmsg 00461 << m_header << endmsg ; 00462 } 00463 { 00464 // Force printing in alphabetical order 00465 typedef std::map<std::pair<std::string,std::string>, Counter*> sorted_map_t; 00466 sorted_map_t sorted_map; 00467 for ( CountMap::const_iterator i = m_counts.begin(); i != m_counts.end(); ++i ) 00468 { 00469 for ( NameMap::const_iterator j = i->second.begin() ; i->second.end() != j ; ++j ) 00470 { 00471 Counter* c = j->second ; 00472 if ( 0 == c ) { continue ; } 00473 sorted_map[std::make_pair(i->first, j->first)] = c; 00474 } 00475 } 00476 for (sorted_map_t::const_iterator i = sorted_map.begin(); i != sorted_map.end(); ++i ) 00477 log << Gaudi::Utils::formatAsTableRow( i->first.second 00478 , i->first.first 00479 , *i->second 00480 , m_useEffFormat 00481 , m_format1 00482 , m_format2 ) 00483 << endmsg ; 00484 } 00485 }
CountMap CounterSvc::m_counts [private] |
bool CounterSvc::m_print [private] |
std::string CounterSvc::m_header [private] |
std::string CounterSvc::m_format1 [private] |
std::string CounterSvc::m_format2 [private] |
bool CounterSvc::m_useEffFormat [private] |