The Gaudi Framework  v36r1 (3e2fb5a8)
AlgsExecutionStates.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2019 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 #ifndef GAUDIHIVE_ALGSEXECUTIONSTATES_H
12 #define GAUDIHIVE_ALGSEXECUTIONSTATES_H
13 
14 // Framework include files
15 #include "GaudiKernel/MsgStream.h"
16 #include "GaudiKernel/Service.h"
17 
18 // C++ include files
19 #include <algorithm>
20 #include <initializer_list>
21 #include <iterator>
22 #include <string>
23 #include <vector>
24 
25 //---------------------------------------------------------------------------
26 
36 class AlgsExecutionStates final {
37 public:
40  enum State : uint8_t {
41  INITIAL = 0,
43  DATAREADY = 2,
45  SCHEDULED = 4,
48  ERROR = 7,
49  MAXVALUE = 8 // Allows loop over all states
50  };
51 
52  AlgsExecutionStates( unsigned int algsNumber, SmartIF<IMessageSvc> MS )
53  : m_states( algsNumber, INITIAL ), m_MS( std::move( MS ) ){};
54 
55  StatusCode set( unsigned int iAlgo, State newState );
56 
58 
60  bool contains( State state ) const { return std::find( m_states.begin(), m_states.end(), state ) != m_states.end(); }
61 
64  return std::find_first_of( m_states.begin(), m_states.end(), l.begin(), l.end() ) != m_states.end();
65  }
66 
69  return std::all_of( m_states.begin(), m_states.end(),
70  [l]( State s ) { return std::find( l.begin(), l.end(), s ) != l.end(); } );
71  };
72 
73  const State& operator[]( unsigned int i ) const { return m_states.at( i ); };
74 
75  size_t size() const { return m_states.size(); }
76 
77  size_t sizeOfSubset( State state ) const {
78  return std::count_if( m_states.begin(), m_states.end(), [&]( State s ) { return s == state; } );
79  }
80 
81 private:
84 
85  MsgStream log() { return {m_MS, "AlgsExecutionStates"}; }
86 
87 public:
88  class Iterator final : public std::iterator<std::forward_iterator_tag, uint> {
89  auto find_valid( std::vector<State>::const_iterator iter ) const { return std::find( iter, m_v->end(), m_s ); }
90 
91  public:
93  : m_s( s ), m_v( &v ), m_pos( find_valid( pos ) ) {}
94 
95  friend bool operator==( const Iterator& lhs, const Iterator& rhs ) {
96  return lhs.m_s == rhs.m_s && lhs.m_v == rhs.m_v && lhs.m_pos == rhs.m_pos;
97  }
98 
99  friend bool operator!=( const Iterator& lhs, const Iterator& rhs ) { return !( lhs == rhs ); }
100 
102  if ( m_pos != m_v->end() ) m_pos = find_valid( std::next( m_pos ) );
103  return *this;
104  }
105 
106  Iterator& operator++( int ) { return ++( *this ); }
107 
108  uint operator*() { return std::distance( m_v->begin(), m_pos ); }
109 
110  private:
114  };
115 
116  Iterator begin( State kind ) { return {kind, m_states, m_states.begin()}; }
117  Iterator end( State kind ) { return {kind, m_states, m_states.end()}; }
118 };
119 
123  switch ( x ) {
124  case State::INITIAL:
125  s << "INITIAL";
126  break;
127  case State::CONTROLREADY:
128  s << "CONTROLREADY";
129  break;
130  case State::DATAREADY:
131  s << "DATAREADY";
132  break;
133  case State::RESOURCELESS:
134  s << "RESOURCELESS";
135  break;
136  case State::SCHEDULED:
137  s << "SCHEDULED";
138  break;
139  case State::EVTACCEPTED:
140  s << "EVTACCEPTED";
141  break;
142  case State::EVTREJECTED:
143  s << "EVTREJECTED";
144  break;
145  case State::ERROR:
146  s << "ERROR";
147  break;
148  default:
149  s << "UNKNOWN";
150  }
151  return s;
152 }
153 
154 #endif // GAUDIHIVE_ALGSEXECUTIONSTATES_H
AlgsExecutionStates::Iterator::m_pos
std::vector< State >::const_iterator m_pos
Definition: AlgsExecutionStates.h:113
AlgsExecutionStates::Iterator::operator*
uint operator*()
Definition: AlgsExecutionStates.h:108
gaudirun.s
string s
Definition: gaudirun.py:328
AlgsExecutionStates::MAXVALUE
@ MAXVALUE
Definition: AlgsExecutionStates.h:49
std::vector< State >
std::find
T find(T... args)
std::vector::size
T size(T... args)
AlgsExecutionStates::Iterator::m_v
const std::vector< State > * m_v
Definition: AlgsExecutionStates.h:112
AlgsExecutionStates
Definition: AlgsExecutionStates.h:36
std::iterator
std::distance
T distance(T... args)
AlgsExecutionStates::end
Iterator end(State kind)
Definition: AlgsExecutionStates.h:117
std::all_of
T all_of(T... args)
AlgsExecutionStates::CONTROLREADY
@ CONTROLREADY
Definition: AlgsExecutionStates.h:42
AlgsExecutionStates::Iterator::Iterator
Iterator(State s, const std::vector< State > &v, std::vector< State >::const_iterator pos)
Definition: AlgsExecutionStates.h:92
std::fill
T fill(T... args)
AlgsExecutionStates::RESOURCELESS
@ RESOURCELESS
Definition: AlgsExecutionStates.h:44
AlgsExecutionStates::m_MS
SmartIF< IMessageSvc > m_MS
Definition: AlgsExecutionStates.h:83
Gaudi::StateMachine::State
State
Allowed states for classes implementing the state machine (ApplicationMgr, Algorithm,...
Definition: StateMachine.h:22
AlgsExecutionStates::log
MsgStream log()
Definition: AlgsExecutionStates.h:85
AlgsExecutionStates::Iterator::operator==
friend bool operator==(const Iterator &lhs, const Iterator &rhs)
Definition: AlgsExecutionStates.h:95
AlgsExecutionStates::ERROR
@ ERROR
Definition: AlgsExecutionStates.h:48
StatusCode
Definition: StatusCode.h:65
std::vector::at
T at(T... args)
AlgsExecutionStates::m_states
std::vector< State > m_states
Definition: AlgsExecutionStates.h:82
AlgsExecutionStates::begin
Iterator begin(State kind)
Definition: AlgsExecutionStates.h:116
std::ostream
STL class.
AlgsExecutionStates::SCHEDULED
@ SCHEDULED
Definition: AlgsExecutionStates.h:45
operator<<
std::ostream & operator<<(std::ostream &s, AlgsExecutionStates::State x)
Streaming of State values.
Definition: AlgsExecutionStates.h:121
AlgsExecutionStates::Iterator::find_valid
auto find_valid(std::vector< State >::const_iterator iter) const
Definition: AlgsExecutionStates.h:89
AlgsExecutionStates::EVTREJECTED
@ EVTREJECTED
Definition: AlgsExecutionStates.h:47
SmartIF< IMessageSvc >
AlgsExecutionStates::Iterator::operator++
Iterator & operator++(int)
Definition: AlgsExecutionStates.h:106
AlgsExecutionStates::reset
void reset()
Definition: AlgsExecutionStates.h:57
AlgsExecutionStates::AlgsExecutionStates
AlgsExecutionStates(unsigned int algsNumber, SmartIF< IMessageSvc > MS)
Definition: AlgsExecutionStates.h:52
AlgsExecutionStates::Iterator::m_s
State m_s
Definition: AlgsExecutionStates.h:111
MsgStream
Definition: MsgStream.h:34
AlgsExecutionStates::contains
bool contains(State state) const
check if the collection contains at least one state of requested type
Definition: AlgsExecutionStates.h:60
AlgsExecutionStates::containsAny
bool containsAny(std::initializer_list< State > l) const
check if the collection contains at least one state of any listed types
Definition: AlgsExecutionStates.h:63
Service.h
HistoDumpEx.v
v
Definition: HistoDumpEx.py:27
AlgsExecutionStates::Iterator::operator++
Iterator & operator++()
Definition: AlgsExecutionStates.h:101
AlgsExecutionStates::set
StatusCode set(unsigned int iAlgo, State newState)
Definition: AlgsExecutionStates.cpp:23
gaudirun.l
dictionary l
Definition: gaudirun.py:553
compareRootHistos.state
def state
Definition: compareRootHistos.py:468
std::vector::begin
T begin(T... args)
std
STL namespace.
MSG::ERROR
@ ERROR
Definition: IMessageSvc.h:25
AlgsExecutionStates::DATAREADY
@ DATAREADY
Definition: AlgsExecutionStates.h:43
AlgsExecutionStates::State
State
Execution states of the algorithms Must have contiguous integer values 0, 1...
Definition: AlgsExecutionStates.h:40
AlgsExecutionStates::EVTACCEPTED
@ EVTACCEPTED
Definition: AlgsExecutionStates.h:46
std::count_if
T count_if(T... args)
std::find_first_of
T find_first_of(T... args)
std::vector::end
T end(T... args)
AlgsExecutionStates::Iterator::operator!=
friend bool operator!=(const Iterator &lhs, const Iterator &rhs)
Definition: AlgsExecutionStates.h:99
AlgsExecutionStates::sizeOfSubset
size_t sizeOfSubset(State state) const
Definition: AlgsExecutionStates.h:77
AlgsExecutionStates::INITIAL
@ INITIAL
Definition: AlgsExecutionStates.h:41
AlgsExecutionStates::containsOnly
bool containsOnly(std::initializer_list< State > l) const
check if the collection contains only states of listed types
Definition: AlgsExecutionStates.h:68
AlgsExecutionStates::operator[]
const State & operator[](unsigned int i) const
Definition: AlgsExecutionStates.h:73
MsgStream.h
AlgsExecutionStates::Iterator
Definition: AlgsExecutionStates.h:88
std::next
T next(T... args)
std::initializer_list
AlgsExecutionStates::size
size_t size() const
Definition: AlgsExecutionStates.h:75