The Gaudi Framework  v33r0 (d5ea422b)
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:

Classes

class  Iterator
 

Public Types

enum  State : uint8_t {
  INITIAL = 0, CONTROLREADY = 1, DATAREADY = 2, RESOURCELESS = 3,
  SCHEDULED = 4, EVTACCEPTED = 5, EVTREJECTED = 6, ERROR = 7
}
 Execution states of the algorithms. 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 More...
 
bool containsAny (std::initializer_list< State > l) const
 check if the collection contains at least one state of any listed types More...
 
bool containsOnly (std::initializer_list< State > l) const
 check if the collection contains only states of listed types More...
 
const Stateoperator[] (unsigned int i) const
 
size_t size () const
 
size_t sizeOfSubset (State state) const
 
Iterator begin (State kind)
 
Iterator end (State kind)
 

Private Member Functions

MsgStream log ()
 

Private Attributes

std::vector< Statem_states
 
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 36 of file AlgsExecutionStates.h.

Member Enumeration Documentation

◆ State

Execution states of the algorithms.

Enumerator
INITIAL 
CONTROLREADY 
DATAREADY 
RESOURCELESS 
SCHEDULED 
EVTACCEPTED 
EVTREJECTED 
ERROR 

Definition at line 39 of file AlgsExecutionStates.h.

Constructor & Destructor Documentation

◆ AlgsExecutionStates()

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

Definition at line 50 of file AlgsExecutionStates.h.

51  : m_states( algsNumber, INITIAL ), m_MS( std::move( MS ) ){};
SmartIF< IMessageSvc > m_MS
T move(T... args)
std::vector< State > m_states

Member Function Documentation

◆ begin()

Iterator AlgsExecutionStates::begin ( State  kind)
inline

Definition at line 114 of file AlgsExecutionStates.h.

114 { return {kind, m_states, m_states.begin()}; }
std::vector< State > m_states
T begin(T... args)

◆ contains()

bool AlgsExecutionStates::contains ( State  state) const
inline

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

Definition at line 58 of file AlgsExecutionStates.h.

58 { return std::find( m_states.begin(), m_states.end(), state ) != m_states.end(); }
T end(T... args)
T find(T... args)
std::vector< State > m_states
T begin(T... args)

◆ 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 61 of file AlgsExecutionStates.h.

61  {
62  return std::find_first_of( m_states.begin(), m_states.end(), l.begin(), l.end() ) != m_states.end();
63  }
T end(T... args)
T find_first_of(T... args)
dictionary l
Definition: gaudirun.py:543
std::vector< State > m_states
T begin(T... args)

◆ containsOnly()

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

check if the collection contains only states of listed types

Definition at line 66 of file AlgsExecutionStates.h.

66  {
67  return std::all_of( m_states.begin(), m_states.end(),
68  [l]( State s ) { return std::find( l.begin(), l.end(), s ) != l.end(); } );
69  };
T end(T... args)
State
Execution states of the algorithms.
dictionary l
Definition: gaudirun.py:543
T find(T... args)
std::vector< State > m_states
T begin(T... args)
T all_of(T... args)
string s
Definition: gaudirun.py:328

◆ end()

Iterator AlgsExecutionStates::end ( State  kind)
inline

Definition at line 115 of file AlgsExecutionStates.h.

115 { return {kind, m_states, m_states.end()}; }
T end(T... args)
std::vector< State > m_states

◆ log()

MsgStream AlgsExecutionStates::log ( )
inlineprivate

Definition at line 83 of file AlgsExecutionStates.h.

83 { return {m_MS, "AlgsExecutionStates"}; }
SmartIF< IMessageSvc > m_MS

◆ operator[]()

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

Definition at line 71 of file AlgsExecutionStates.h.

71 { return m_states.at( i ); };
T at(T... args)
std::vector< State > m_states

◆ reset()

void AlgsExecutionStates::reset ( )
inline

Definition at line 55 of file AlgsExecutionStates.h.

T end(T... args)
std::vector< State > m_states
T begin(T... args)
T fill(T... args)

◆ 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;
26  return StatusCode::FAILURE;
27  }
28 
29  // Allow cycling of a single state
30  if ( m_states[iAlgo] == newState ) return StatusCode::SUCCESS;
31 
32  switch ( transition( m_states[iAlgo], newState ) ) {
33  case transition( INITIAL, CONTROLREADY ):
34  [[fallthrough]];
35  case transition( CONTROLREADY, DATAREADY ):
36  [[fallthrough]];
37  case transition( DATAREADY, SCHEDULED ):
38  [[fallthrough]];
39  case transition( DATAREADY, RESOURCELESS ):
40  [[fallthrough]];
41  case transition( RESOURCELESS, SCHEDULED ):
42  [[fallthrough]];
43  case transition( SCHEDULED, ERROR ):
44  [[fallthrough]];
45  case transition( SCHEDULED, EVTACCEPTED ):
46  [[fallthrough]];
47  case transition( SCHEDULED, EVTREJECTED ):
48  m_states[iAlgo] = newState;
49  return StatusCode::SUCCESS;
50  default:
51  log() << MSG::ERROR << "[AlgIndex " << iAlgo << "] Transition from " << m_states[iAlgo] << " to " << newState
52  << " is not allowed" << endmsg;
53  m_states[iAlgo] = ERROR;
54  return StatusCode::FAILURE;
55  }
56 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:96
T size(T... args)
std::vector< State > m_states
constexpr static const auto FAILURE
Definition: StatusCode.h:97
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202

◆ size()

size_t AlgsExecutionStates::size ( ) const
inline

Definition at line 73 of file AlgsExecutionStates.h.

73 { return m_states.size(); }
T size(T... args)
std::vector< State > m_states

◆ sizeOfSubset()

size_t AlgsExecutionStates::sizeOfSubset ( State  state) const
inline

Definition at line 75 of file AlgsExecutionStates.h.

75  {
76  return std::count_if( m_states.begin(), m_states.end(), [&]( State s ) { return s == state; } );
77  }
T end(T... args)
State
Execution states of the algorithms.
T count_if(T... args)
std::vector< State > m_states
T begin(T... args)
string s
Definition: gaudirun.py:328

Member Data Documentation

◆ m_MS

SmartIF<IMessageSvc> AlgsExecutionStates::m_MS
private

Definition at line 81 of file AlgsExecutionStates.h.

◆ m_states

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

Definition at line 80 of file AlgsExecutionStates.h.


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