The Gaudi Framework  master (ff829712)
Loading...
Searching...
No Matches
AlgsExecutionStates Class Referencefinal

The AlgsExecutionStates encodes the state machine for the execution of algorithms within a single event. More...

#include <GaudiKernel/AlgsExecutionStates.h>

Collaboration diagram for AlgsExecutionStates:

Public Types

enum  State : uint8_t {
  INITIAL = 0 , CONTROLREADY = 1 , DATAREADY = 2 , RESOURCELESS = 3 ,
  SCHEDULED = 4 , EVTACCEPTED = 5 , EVTREJECTED = 6 , ERROR = 7 ,
  MAXVALUE = 8
}
 Execution states of the algorithms Must have contiguous integer values 0, 1... N. More...
 

Public Member Functions

 AlgsExecutionStates (unsigned int algsNumber, SmartIF< IMessageSvc > MS)
 
StatusCode set (unsigned int iAlgo, State newState)
 
void reset ()
 
bool contains (State state) const
 check if the collection contains at least one state of requested type
 
bool containsAny (std::initializer_list< State > l) const
 check if the collection contains at least one state of any listed types
 
const boost::container::flat_set< int > algsInState (State state) const
 
const Stateoperator[] (unsigned int i) const
 
size_t size () const
 
size_t sizeOfSubset (State state) const
 

Private Member Functions

MsgStream log ()
 

Private Attributes

std::vector< Statem_states
 
std::vector< boost::container::flat_set< int > > m_algsInState
 
SmartIF< IMessageSvcm_MS
 

Detailed Description

The AlgsExecutionStates encodes the state machine for the execution of algorithms within a single event.

It is used by the concurrent schedulers

Author
Benedikt Hegner
Danilo Piparo
Version
1.0

Definition at line 37 of file AlgsExecutionStates.h.

Member Enumeration Documentation

◆ State

Execution states of the algorithms Must have contiguous integer values 0, 1... N.

Enumerator
INITIAL 
CONTROLREADY 
DATAREADY 
RESOURCELESS 
SCHEDULED 
EVTACCEPTED 
EVTREJECTED 
ERROR 
MAXVALUE 

Definition at line 41 of file AlgsExecutionStates.h.

Constructor & Destructor Documentation

◆ AlgsExecutionStates()

AlgsExecutionStates::AlgsExecutionStates ( unsigned int algsNumber,
SmartIF< IMessageSvc > MS )
inline

Definition at line 53 of file AlgsExecutionStates.h.

54 : m_states( algsNumber, INITIAL ), m_algsInState( MAXVALUE ), m_MS( std::move( MS ) ) {
55
56 m_algsInState[INITIAL].reserve( algsNumber );
57 for ( unsigned int i = 0; i < algsNumber; ++i ) m_algsInState[INITIAL].insert( i );
58 }
std::vector< State > m_states
std::vector< boost::container::flat_set< int > > m_algsInState
SmartIF< IMessageSvc > m_MS
constexpr struct Gaudi::Functional::details::insert_t insert

Member Function Documentation

◆ algsInState()

const boost::container::flat_set< int > AlgsExecutionStates::algsInState ( State state) const
inline

Definition at line 82 of file AlgsExecutionStates.h.

◆ contains()

bool AlgsExecutionStates::contains ( State state) const
inline

check if the collection contains at least one state of requested type

Definition at line 71 of file AlgsExecutionStates.h.

71{ return m_algsInState[state].size() > 0; }

◆ containsAny()

bool AlgsExecutionStates::containsAny ( std::initializer_list< State > l) const
inline

check if the collection contains at least one state of any listed types

Definition at line 74 of file AlgsExecutionStates.h.

74 {
75 for ( auto state : l )
76 if ( m_algsInState[state].size() > 0 ) return true;
77 return false;
78 }

◆ log()

MsgStream AlgsExecutionStates::log ( )
inlineprivate

Definition at line 95 of file AlgsExecutionStates.h.

95{ return { m_MS, "AlgsExecutionStates" }; }

◆ operator[]()

const State & AlgsExecutionStates::operator[] ( unsigned int i) const
inline

Definition at line 84 of file AlgsExecutionStates.h.

84{ return m_states.at( i ); }

◆ reset()

void AlgsExecutionStates::reset ( )
inline

Definition at line 62 of file AlgsExecutionStates.h.

62 {
63 std::fill( m_states.begin(), m_states.end(), INITIAL );
64
65 for ( auto& algs : m_algsInState ) algs.clear();
66 m_algsInState[INITIAL].reserve( m_states.size() );
67 for ( unsigned int i = 0; i < m_states.size(); ++i ) m_algsInState[INITIAL].insert( i );
68 }

◆ set()

StatusCode AlgsExecutionStates::set ( unsigned int iAlgo,
State newState )

Definition at line 23 of file AlgsExecutionStates.cpp.

23 {
24 if ( iAlgo >= m_states.size() ) {
25 log() << MSG::ERROR << "Index out of bound (" << iAlgo << " / " << m_states.size() << ")" << endmsg;
27 }
28
29 State oldState = m_states[iAlgo];
30
31 // Allow cycling of a single state
32 if ( oldState == newState ) return StatusCode::SUCCESS;
33
34 switch ( transition( oldState, newState ) ) {
35 case transition( INITIAL, CONTROLREADY ):
36 [[fallthrough]];
37 case transition( CONTROLREADY, DATAREADY ):
38 [[fallthrough]];
39 case transition( DATAREADY, SCHEDULED ):
40 [[fallthrough]];
41 case transition( DATAREADY, RESOURCELESS ):
42 [[fallthrough]];
43 case transition( RESOURCELESS, SCHEDULED ):
44 [[fallthrough]];
45 case transition( SCHEDULED, ERROR ):
46 [[fallthrough]];
47 case transition( SCHEDULED, EVTACCEPTED ):
48 [[fallthrough]];
49 case transition( SCHEDULED, EVTREJECTED ):
50 m_states[iAlgo] = newState;
51 m_algsInState[oldState].erase( iAlgo );
52 m_algsInState[newState].insert( iAlgo );
54 default:
55 log() << MSG::ERROR << "[AlgIndex " << iAlgo << "] Transition from " << m_states[iAlgo] << " to " << newState
56 << " is not allowed" << endmsg;
57 m_states[iAlgo] = ERROR;
58 m_algsInState[oldState].erase( iAlgo );
59 m_algsInState[ERROR].insert( iAlgo );
61 }
62}
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition MsgStream.h:198
State
Execution states of the algorithms Must have contiguous integer values 0, 1... N.
constexpr static const auto SUCCESS
Definition StatusCode.h:99
constexpr static const auto FAILURE
Definition StatusCode.h:100
@ ERROR
Definition IMessageSvc.h:22

◆ size()

size_t AlgsExecutionStates::size ( ) const
inline

Definition at line 86 of file AlgsExecutionStates.h.

86{ return m_states.size(); }

◆ sizeOfSubset()

size_t AlgsExecutionStates::sizeOfSubset ( State state) const
inline

Definition at line 88 of file AlgsExecutionStates.h.

88{ return m_algsInState[state].size(); }

Member Data Documentation

◆ m_algsInState

std::vector<boost::container::flat_set<int> > AlgsExecutionStates::m_algsInState
private

Definition at line 92 of file AlgsExecutionStates.h.

◆ m_MS

SmartIF<IMessageSvc> AlgsExecutionStates::m_MS
private

Definition at line 93 of file AlgsExecutionStates.h.

◆ m_states

std::vector<State> AlgsExecutionStates::m_states
private

Definition at line 91 of file AlgsExecutionStates.h.


The documentation for this class was generated from the following files: