All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
AlgsExecutionStates.cpp
Go to the documentation of this file.
1 #include "AlgsExecutionStates.h"
2 
3 // A simple map to easily translate a state to its name
4 std::map<AlgsExecutionStates::State,std::string> AlgsExecutionStates::stateNames = {
5  {INITIAL,"INITIAL"},
6  {CONTROLREADY,"CONTROLREADY"},
7  {DATAREADY,"DATAREADY"},
8  {SCHEDULED,"SCHEDULED"},
9  {EVTACCEPTED,"EVTACCEPTED"},
10  {EVTREJECTED,"EVTREJECTED"},
11  {ERROR,"ERROR"}
12  };
13 
14 StatusCode AlgsExecutionStates::updateState(unsigned int iAlgo,State newState) {
15 
16  MsgStream log(m_MS, "AlgExecutionStates");
17  const unsigned int states_size = m_states.size();
18 
19  if (iAlgo>=states_size){
20  log << MSG::ERROR << "Index out of bound ("
21  << iAlgo << " and the size of the states vector is "
22  << states_size << ")" << endmsg;
23 
24  return StatusCode::FAILURE;
25  }
26 
27  switch (newState) {
28  case INITIAL:
29  log << MSG::ERROR << "[AlgIndex " << iAlgo <<"] Transition to INITIAL is not defined.";
30  return StatusCode::FAILURE;
31  //
32  case CONTROLREADY:
33  if (m_states[iAlgo]!=INITIAL){
34  log << MSG::ERROR << "[AlgIndex " << iAlgo <<"] Transition to CONTROLREADY possible only from INITIAL state! The state is " << m_states[iAlgo] << endmsg;
35  return StatusCode::FAILURE;
36  } else {
37  m_states[iAlgo]=CONTROLREADY;
38  return StatusCode::SUCCESS;
39  }
40  //
41  case DATAREADY:
42  if (m_states[iAlgo]!=CONTROLREADY){
43  log << MSG::ERROR << "[AlgIndex " << iAlgo <<"] Transition to DATAREADY possible only from CONTROLREADY state!The state is " << m_states[iAlgo] << endmsg;
44  return StatusCode::FAILURE;
45  } else {
46  m_states[iAlgo]=DATAREADY;
47  return StatusCode::SUCCESS;
48  }
49  case SCHEDULED:
50  if (m_states[iAlgo]!=DATAREADY){
51  log << MSG::ERROR << "[AlgIndex " << iAlgo <<"] Transition to SCHEDULED possible only from DATAREADY state! The state is " << m_states[iAlgo] << endmsg;
52  return StatusCode::FAILURE;
53  } else {
54  m_states[iAlgo]=SCHEDULED;
55  return StatusCode::SUCCESS;
56  }
57  //
58  case EVTACCEPTED:
59  if (m_states[iAlgo]!=SCHEDULED){
60  log << MSG::ERROR << "[AlgIndex " << iAlgo <<"] Transition to EVTACCEPTED possible only from SCHEDULED state! The state is " << m_states[iAlgo] << endmsg;
61  return StatusCode::FAILURE;
62  } else {
63  m_states[iAlgo]=EVTACCEPTED;
64  return StatusCode::SUCCESS;
65  }
66  //
67  case EVTREJECTED:
68  if (m_states[iAlgo]!=SCHEDULED){
69  log << MSG::ERROR << "[AlgIndex " << iAlgo <<"] Transition to EVTREJECT possible only from SCHEDULED state! The state is " << m_states[iAlgo] << endmsg;
70  return StatusCode::FAILURE;
71  } else {
72  m_states[iAlgo]=EVTREJECTED;
73  return StatusCode::SUCCESS;
74  }
75  default:
76  //
77  m_states[iAlgo]=ERROR;
78  return StatusCode::SUCCESS;
79  }
80 
81  return StatusCode::FAILURE;
82 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
SmartIF< IMessageSvc > m_MS
std::vector< State > m_states
State
Execution states of the algorithms.
static std::map< State, std::string > stateNames
StatusCode updateState(unsigned int iAlgo, State newState)