The Gaudi Framework  v30r4 (9b837755)
IncidentSvc.h
Go to the documentation of this file.
1 #ifndef IncidentSvc_IncidentSvc_H
2 #define IncidentSvc_IncidentSvc_H
3 // ============================================================================
4 // Include Files
5 // ============================================================================
6 // STD & STL
7 // ============================================================================
8 #include <algorithm>
9 #include <list>
10 #include <map>
11 // ============================================================================
12 // GaudiKernel
13 // ============================================================================
15 #include "GaudiKernel/HashMap.h"
17 #include "GaudiKernel/Service.h"
18 #include "GaudiKernel/StringKey.h"
19 // ============================================================================
20 // TBB
21 // ============================================================================
22 #include "tbb/concurrent_queue.h"
23 #include "tbb/concurrent_unordered_map.h"
24 // ============================================================================
36 struct isSingleShot_t;
37 
38 class IncidentSvc : public extends<Service, IIncidentSvc>
39 {
40 public:
41  struct Listener final {
43  long priority{0};
44  bool rethrow{false};
45  bool singleShot{false};
46 
47  Listener( IIncidentListener* il, long pri, bool thr = false, bool single = false )
48  : iListener( il ), priority( pri ), rethrow( thr ), singleShot( single )
49  {
50  }
51  };
52 
53 private:
54  // Typedefs
55  // ListenerList should be a list rather than a vector because handing
56  // a fired incident may result in a call to addListener.
59 
60 public:
61  // Inherited Service overrides:
62  //
63  StatusCode initialize() override;
64  StatusCode finalize() override;
65 
66  // IIncidentSvc interfaces overwrite
67  //
68  void addListener( IIncidentListener* lis, const std::string& type = "", long priority = 0, bool rethrow = false,
69  bool singleShot = false ) override;
70 
71  void removeListener( IIncidentListener* l, const std::string& type = "" ) override;
72  void fireIncident( const Incident& incident ) override;
73  void fireIncident( std::unique_ptr<Incident> incident ) override;
74  // TODO: return by value instead...
75  void getListeners( std::vector<IIncidentListener*>& lis, const std::string& type = "" ) const override;
76 
77  // Standard Constructor.
78  IncidentSvc( const std::string& name, ISvcLocator* svc );
79  // Destructor.
80  ~IncidentSvc() override;
82 
83 private:
85  // ==========================================================================
87  void i_fireIncident( const Incident& incident, const std::string& type );
88 
90  ListenerMap m_listenerMap;
91 
95 
98 
101  mutable bool m_timerLock = false;
102  // ==========================================================================
103  // When TBB supports unique_ptrs in concurrent queue typedef should be changed
104  // typedef tbb::concurrent_queue<std::unique_ptr<Incident>> IncQueue_t;
105  typedef tbb::concurrent_queue<Incident*> IncQueue_t;
106  tbb::concurrent_unordered_map<EventContext, IncQueue_t, EventContextHash, EventContextHash> m_firedIncidents;
107 };
108 // ============================================================================
109 // The END
110 // ============================================================================
111 #endif
112 // ============================================================================
ChronoEntity m_timer
timer & it&#39;s lock
Definition: IncidentSvc.h:100
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:288
StatusCode finalize() override
Definition: IncidentSvc.cpp:74
a small helper class for implementation of ChronoStatSvc service, It also could be used as some local...
Definition: ChronoEntity.h:21
bool m_timerLock
Definition: IncidentSvc.h:101
void addListener(IIncidentListener *lis, const std::string &type="", long priority=0, bool rethrow=false, bool singleShot=false) override
Definition: IncidentSvc.cpp:95
IIncidentSvc::IncidentPack getIncidents(const EventContext *ctx) override
ListenerMap::iterator removeListenerFromList(ListenerMap::iterator, IIncidentListener *item, bool scheduleRemoval)
std::list< Listener > ListenerList
Definition: IncidentSvc.h:57
This class represents an entry point to all the event specific data.
Definition: EventContext.h:31
IncidentSvc(const std::string &name, ISvcLocator *svc)
Definition: IncidentSvc.cpp:51
~IncidentSvc() override
Definition: IncidentSvc.cpp:53
STL class.
The interface implemented by any class wanting to listen to Incidents.
std::recursive_mutex m_listenerMapMutex
Mutex to synchronize access to m_listenerMap.
Definition: IncidentSvc.h:97
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
void removeListener(IIncidentListener *l, const std::string &type="") override
StatusCode initialize() override
Definition: IncidentSvc.cpp:57
const std::string * m_currentIncidentType
Incident being fired.
Definition: IncidentSvc.h:94
Listener(IIncidentListener *il, long pri, bool thr=false, bool single=false)
Definition: IncidentSvc.h:47
STL class.
IIncidentListener * iListener
Definition: IncidentSvc.h:42
tbb::concurrent_queue< Incident * > IncQueue_t
Definition: IncidentSvc.h:105
tbb::concurrent_unordered_map< EventContext, IncQueue_t, EventContextHash, EventContextHash > m_firedIncidents
Definition: IncidentSvc.h:106
dictionary l
Definition: gaudirun.py:453
void getListeners(std::vector< IIncidentListener * > &lis, const std::string &type="") const override
STL class.
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
void i_fireIncident(const Incident &incident, const std::string &type)
Internal function to allow incidents listening to all events.
Base class for all Incidents (computing events).
Definition: Incident.h:17
Common class providing an architecture-independent hash map.
Definition: HashMap.h:74
void fireIncident(const Incident &incident) override
ListenerMap m_listenerMap
List of auditor names.
Definition: IncidentSvc.h:90
Default implementation of the IIncidentSvc interface.
Definition: IncidentSvc.h:38
GaudiUtils::HashMap< Gaudi::StringKey, std::unique_ptr< ListenerList > > ListenerMap
Definition: IncidentSvc.h:58