The Gaudi Framework  master (ff829712)
Loading...
Searching...
No Matches
IAlgExecStateSvc.h
Go to the documentation of this file.
1/***********************************************************************************\
2* (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3* *
4* This software is distributed under the terms of the Apache version 2 licence, *
5* copied verbatim in the file "LICENSE". *
6* *
7* In applying this licence, CERN does not waive the privileges and immunities *
8* granted to it by virtue of its status as an Intergovernmental Organization *
9* or submit itself to any jurisdiction. *
10\***********************************************************************************/
11#pragma once
12
17#include <sstream>
18
19class EventContext;
21
22namespace AlgExecState {
23 enum State { None = 0, Executing = 1, Done = 2 };
24} // namespace AlgExecState
25
33public:
35 enum struct AlgKey : size_t {};
37 : m_svc{ svc }, m_ctx{ ctx }, m_algKey{ algKey } {}
38
39 bool filterPassed() const;
40 void setFilterPassed( bool f = true );
41 State state() const;
42 void setState( State s );
43 void setState( State s, const StatusCode& sc );
44 const StatusCode& execStatus() const;
46 void reset();
47 friend std::ostream& operator<<( std::ostream& ost, const AlgExecStateRef& s );
48
49private:
53};
54
59public:
61 : m_svc{ svc }, m_ctx{ ctx }, m_algKey{ algKey } {}
62
63 bool filterPassed() const;
65 const StatusCode& execStatus() const;
66 friend std::ostream& operator<<( std::ostream& ost, const AlgExecStateRefConst& s );
67
68private:
72};
73
74namespace EventStatus {
75 enum Status { Invalid = 0, Success = 1, AlgFail = 2, AlgStall = 3, Other = 4 };
76 inline std::ostream& operator<<( std::ostream& os, Status s ) {
77 static constexpr std::array<const char*, 5> label{ "Invalid", "Success", "AlgFail", "AlgStall", "Other" };
78 return os << label.at( s );
79 }
80} // namespace EventStatus
81
94class GAUDI_API IAlgExecStateSvc : virtual public IInterface {
95public:
98
101 virtual AlgExecStateRef algExecState( const std::string& algName, const EventContext& ctx ) = 0;
102
105 virtual AlgExecStateRef algExecState( const IAlgorithm* iAlg, const EventContext& ctx ) = 0;
106
109 virtual AlgExecStateRefConst algExecState( const std::string& algName, const EventContext& ctx ) const = 0;
110
113 virtual AlgExecStateRefConst algExecState( const IAlgorithm* iAlg, const EventContext& ctx ) const = 0;
114
116 virtual void reset( const EventContext& ctx ) = 0;
117
120 AlgExecStateRef::AlgKey addAlg( const IAlgorithm* iAlg ) { return addAlg( iAlg->nameKey() ); }
121
122 virtual const EventStatus::Status& eventStatus( const EventContext& ctx ) const = 0;
123 virtual void setEventStatus( const EventStatus::Status& sc, const EventContext& ctx ) = 0;
124 virtual void updateEventStatus( const bool& b, const EventContext& ctx ) = 0;
125
126 virtual unsigned int algErrorCount( const IAlgorithm* iAlg ) const = 0;
127 virtual void resetErrorCount( const IAlgorithm* iAlg ) = 0;
128 virtual void resetErrorCount() = 0;
129 virtual unsigned int incrementErrorCount( const IAlgorithm* iAlg ) = 0;
130
131 virtual void dump( std::ostream& ost, const EventContext& ctx ) const = 0;
132 virtual void dump( std::ostream&, const EventContext&, AlgExecStateRef::AlgKey ) const = 0;
133
134private:
135 virtual bool filterPassed( const EventContext&, AlgExecStateRef::AlgKey ) const = 0;
136 virtual void setFilterPassed( const EventContext&, AlgExecStateRef::AlgKey, bool ) = 0;
140 virtual const StatusCode& execStatus( const EventContext&, AlgExecStateRef::AlgKey ) const = 0;
142 virtual const std::string& algName( AlgExecStateRef::AlgKey ) const = 0;
143
145 friend class AlgExecStateRef;
146};
147
148inline bool AlgExecStateRef::filterPassed() const { return m_svc.filterPassed( m_ctx, m_algKey ); }
149inline void AlgExecStateRef::setFilterPassed( bool f ) { m_svc.setFilterPassed( m_ctx, m_algKey, f ); }
153 m_svc.setState( m_ctx, m_algKey, s, sc );
154}
155inline const StatusCode& AlgExecStateRef::execStatus() const { return m_svc.execStatus( m_ctx, m_algKey ); }
156inline void AlgExecStateRef::setExecStatus( const StatusCode& sc ) { m_svc.setExecStatus( m_ctx, m_algKey, sc ); }
157inline void AlgExecStateRef::reset() { m_svc.reset( m_ctx ); }
158inline std::ostream& operator<<( std::ostream& ost, const AlgExecStateRef& s ) {
159 s.m_svc.dump( ost, s.m_ctx, s.m_algKey );
160 return ost;
161}
162
163inline bool AlgExecStateRefConst::filterPassed() const { return m_svc.filterPassed( m_ctx, m_algKey ); }
165inline const StatusCode& AlgExecStateRefConst::execStatus() const { return m_svc.execStatus( m_ctx, m_algKey ); }
166inline std::ostream& operator<<( std::ostream& ost, const AlgExecStateRefConst& s ) {
167 s.m_svc.dump( ost, s.m_ctx, s.m_algKey );
168 return ost;
169}
std::ostream & operator<<(std::ostream &ost, const AlgExecStateRef &s)
#define GAUDI_API
Definition Kernel.h:49
wrapper on an Algorithm state, const version.
const StatusCode & execStatus() const
AlgExecStateRef::AlgKey m_algKey
const EventContext & m_ctx
AlgExecStateRef::State state() const
AlgExecStateRefConst(const IAlgExecStateSvc &svc, const EventContext &ctx, AlgExecStateRef::AlgKey algKey)
friend std::ostream & operator<<(std::ostream &ost, const AlgExecStateRefConst &s)
const IAlgExecStateSvc & m_svc
wrapper on an Algorithm state.
void setFilterPassed(bool f=true)
friend std::ostream & operator<<(std::ostream &ost, const AlgExecStateRef &s)
State state() const
const StatusCode & execStatus() const
IAlgExecStateSvc & m_svc
void setState(State s)
AlgExecState::State State
AlgExecStateRef(IAlgExecStateSvc &svc, const EventContext &ctx, AlgKey algKey)
bool filterPassed() const
void setExecStatus(const StatusCode &sc=StatusCode::SUCCESS)
const EventContext & m_ctx
This class represents an entry point to all the event specific data.
Helper class for efficient "key" access for strings.
Definition StringKey.h:66
Abstract interface for a service that manages the Algorithm execution states.
virtual AlgExecStateRef::AlgKey addAlg(const Gaudi::StringKey &algName)=0
adds a new algorithm to the service
DeclareInterfaceID(IAlgExecStateSvc, 2, 0)
InterfaceID.
virtual void dump(std::ostream &, const EventContext &, AlgExecStateRef::AlgKey) const =0
virtual AlgExecStateRefConst algExecState(const std::string &algName, const EventContext &ctx) const =0
get the Algorithm Execution State for a give Algorithm by name, const version prefer using IAlgorithm...
friend class AlgExecStateRefConst
virtual void updateEventStatus(const bool &b, const EventContext &ctx)=0
virtual void setExecStatus(const EventContext &, AlgExecStateRef::AlgKey, const StatusCode &)=0
virtual AlgExecStateRef algExecState(const IAlgorithm *iAlg, const EventContext &ctx)=0
get the Algorithm Execution State for a give Algorithm and EventContext prefer using IAlgorithm::exec...
virtual void setFilterPassed(const EventContext &, AlgExecStateRef::AlgKey, bool)=0
virtual AlgExecStateRef::State state(const EventContext &, AlgExecStateRef::AlgKey) const =0
virtual const EventStatus::Status & eventStatus(const EventContext &ctx) const =0
virtual const StatusCode & execStatus(const EventContext &, AlgExecStateRef::AlgKey) const =0
virtual void resetErrorCount(const IAlgorithm *iAlg)=0
virtual void resetErrorCount()=0
virtual unsigned int algErrorCount(const IAlgorithm *iAlg) const =0
virtual AlgExecStateRefConst algExecState(const IAlgorithm *iAlg, const EventContext &ctx) const =0
get the Algorithm Execution State for a give Algorithm and EventContext, const version prefer using I...
virtual bool filterPassed(const EventContext &, AlgExecStateRef::AlgKey) const =0
virtual const std::string & algName(AlgExecStateRef::AlgKey) const =0
virtual void setState(const EventContext &, AlgExecStateRef::AlgKey, AlgExecStateRef::State, const StatusCode &)=0
virtual AlgExecStateRef algExecState(const std::string &algName, const EventContext &ctx)=0
get the Algorithm Execution State for a give Algorithm by name prefer using IAlgorithm::execState,...
virtual unsigned int incrementErrorCount(const IAlgorithm *iAlg)=0
AlgExecStateRef::AlgKey addAlg(const IAlgorithm *iAlg)
virtual void reset(const EventContext &ctx)=0
reset all states for the given EventContext
virtual void setEventStatus(const EventStatus::Status &sc, const EventContext &ctx)=0
virtual void dump(std::ostream &ost, const EventContext &ctx) const =0
virtual void setState(const EventContext &, AlgExecStateRef::AlgKey, AlgExecStateRef::State)=0
friend class AlgExecStateRef
The IAlgorithm is the interface implemented by the Algorithm base class.
Definition IAlgorithm.h:36
virtual const Gaudi::StringKey & nameKey() const =0
StringKey rep of name.
Definition of the basic interface.
Definition IInterface.h:225
This class is used for returning status codes from appropriate routines.
Definition StatusCode.h:64
constexpr static const auto SUCCESS
Definition StatusCode.h:99
std::ostream & operator<<(std::ostream &os, Status s)