otsdaq  v2_03_00
VStateMachine.h
1 #ifndef _ots_VStateMachine_h_
2 #define _ots_VStateMachine_h_
3 
4 #include <string>
5 
6 namespace ots
7 {
8 class CoreSupervisorBase;
9 
11 {
12  public:
13  VStateMachine(void) { ; }
14  virtual ~VStateMachine(void) { ; }
15 
16  // Transitions
17  virtual void configure(void) = 0;
18  virtual void halt(void) = 0;
19  virtual void pause(void) = 0;
20  virtual void resume(void) = 0;
21  virtual void start(std::string runNumber) = 0;
22  virtual void stop(void) = 0;
23 
24  // States
25  virtual bool running(void) { return false; }
26  virtual void paused(void) { ; }
27  virtual void halted(void) { ; }
28  virtual void configured(void) { ; }
29  virtual void initial(void) { ; }
30  virtual void inError(void) { ; }
31 
32  void setIterationIndex(unsigned int i) { iterationIndex_ = i; }
33  void setSubIterationIndex(unsigned int i) { subIterationIndex_ = i; }
34  unsigned int getIterationIndex(void) { return iterationIndex_; }
35  unsigned int getSubIterationIndex(void) { return subIterationIndex_; }
36  void indicateIterationWork(void) { iterationWorkFlag_ = true; }
37  void clearIterationWork(void) { iterationWorkFlag_ = false; }
38  bool getIterationWork(void) { return iterationWorkFlag_; }
39  void indicateSubIterationWork(void) { subIterationWorkFlag_ = true; }
40  void clearSubIterationWork(void) { subIterationWorkFlag_ = false; }
41  bool getSubIterationWork(void) { return subIterationWorkFlag_; }
42 
43  CoreSupervisorBase* parentSupervisor_; // e.g. to communicate error fault and start
44  // transition to error for entire system
45 
46  private:
47  unsigned int iterationIndex_, subIterationIndex_;
48  bool iterationWorkFlag_, subIterationWorkFlag_;
49 };
50 
51 } // namespace ots
52 
53 #endif