61 std::vector<IRegistry*> leaves;
64 for (
auto& pReg : leaves ) {
66 if ( !pReg->address() || !pReg->object() )
continue;
67 const std::string&
id = pReg->identifier();
68 auto j =
m_info.find(
id );
73 j->second.id =
m_info.size();
74 j->second.clid = pReg->object()->clID();
96 log <<
"== BEGIN ============= Access list content:" <<
m_info.size() <<
endmsg;
97 for (
const auto& i :
m_info ) {
99 log <<
"== ITEM == " << std::right << std::setw( 4 ) << std::dec <<
info.id <<
" clid:" << std::right
100 << std::setw( 8 ) << std::hex <<
info.clid <<
" Count:" << std::right << std::setw( 6 ) << std::dec
101 <<
info.count <<
" " << i.first +
":" <<
endmsg;
102 auto c =
m_corr.find( i.first );
103 if ( c !=
m_corr.end() ) {
105 log <<
"== CORRELATIONS:" << ( *c ).second.size() <<
endmsg;
106 for (
const auto& k : c->second ) {
107 if ( k.second > 0 ) {
108 log << std::dec << k.first <<
":" << k.second <<
" ";
115 if ( cnt > 0 ) log <<
endmsg;
117 auto l =
m_links.find( i.first );
120 log <<
"== LINKS:" << l->second.size() <<
endmsg;
121 for (
const auto& k : l->second ) {
122 if ( k.second > 0 ) {
123 log << std::dec << k.first <<
":" << k.second <<
" ";
130 if ( cnt > 0 ) log <<
endmsg;
144 auto& evnt =
m_curr[
"/Event"];
145 evnt.count =
explore( root->registry() );
146 evnt.clid = root->clID();
149 for (
const auto& i :
m_info ) {
150 const std::string& nam = i.first;
152 auto c =
m_corr.find( nam );
153 if ( c ==
m_corr.end() ) {
157 for (
const auto& l :
m_curr ) {
158 const auto&
id = l.second.id;
159 auto k = c->second.find(
id );
160 if ( k == c->second.end() ) k = c->second.emplace(
id, 0 ).first;
165 if ( c ==
m_links.end() ) c =
m_links.emplace( nam, std::map<int, int>{} ).first;
169 if ( !obj )
continue;
172 for (
long l = 0; l < m->size(); ++l ) {
173 auto* lnk = m->link( l );
174 auto il =
m_curr.find( lnk->path() );
176 if ( il ==
m_curr.end() )
continue;
177 if ( !lnk->object() )
continue;
178 const auto&
id = il->second.id;
179 auto k = c->second.find(
id );
180 if ( k == c->second.end() ) k = c->second.emplace(
id, 0 ).first;
unsigned int CLID
Class ID definition.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
#define DECLARE_COMPONENT(type)
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
MsgStream & always() const
shortcut for the method msgStream(MSG::ALWAYS)
SmartIF< IDataProviderSvc > & eventSvc() const
The standard event data service.
Algorithm(std::string name, ISvcLocator *svcloc, std::string version=PACKAGE_VERSION)
Constructor.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
A LinkManager is the object aggregated into a DataObject, which is responsible for the handling of no...
A small class used to access easily (and efficiently) data items residing in data stores.
Small smart pointer class with automatic reference counting for IInterface.
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
This class is used for returning status codes from appropriate routines.
constexpr static const auto SUCCESS
Small algorithm, which traverses the data store and prints a summary of the leafs accessed during the...
SmartIF< IDataManagerSvc > m_mgr
std::map< std::string, std::map< int, int > > Correlations
size_t explore(IRegistry *pObj)
StatusCode execute() override
Execute procedure.
StatusCode initialize() override
Initialize.
StatusCode finalize() override
Finalize.
std::map< std::string, LeafInfo > SniffInfo