otsdaq  3.10.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(const std::string& name)
14  : iterationIndex_(0)
15  , subIterationIndex_(0)
16  , iterationWorkFlag_(false)
17  , subIterationWorkFlag_(false)
18  , name_(name)
19  {
20  ;
21  }
22  virtual ~VStateMachine(void) { ; }
23 
25  virtual void configure(void) = 0;
26  virtual void halt(void) = 0;
27  virtual void pause(void) = 0;
28  virtual void resume(void) = 0;
29  virtual void start(std::string runNumber) = 0;
30  virtual void stop(void) = 0;
31 
33  virtual bool running(void) { return false; }
34  virtual void paused(void) { ; }
35  virtual void halted(void) { ; }
36  virtual void configured(void) { ; }
37  virtual void initial(void) { ; }
38  virtual void inError(void) { ; }
39 
41  //==============================================================================
44  virtual std::string getStatusProgressDetail(void)
45  {
46  std::string progress = "";
47 
48  if(VStateMachine::getSubIterationWork())
49  {
50  // sub-steps going on
51  progress += name_ + ":";
52 
53  // check for iteration alias
54  if(iterationAliasMap_.find(transitionName_) != iterationAliasMap_.end() &&
55  iterationAliasMap_.at(transitionName_)
56  .find(VStateMachine::getIterationIndex()) !=
57  iterationAliasMap_.at(transitionName_).end())
58  progress += iterationAliasMap_.at(transitionName_)
59  .at(VStateMachine::getIterationIndex());
60  else
61  progress +=
62  std::to_string(VStateMachine::getIterationIndex());
63 
64  progress += ":";
65 
66  // check for sib-iteration alias
67  if(subIterationAliasMap_.find(transitionName_) !=
68  subIterationAliasMap_.end() &&
69  subIterationAliasMap_.at(transitionName_)
70  .find(VStateMachine::getSubIterationIndex()) !=
71  subIterationAliasMap_.at(transitionName_).end())
72  progress += subIterationAliasMap_.at(transitionName_)
73  .at(VStateMachine::getSubIterationIndex());
74  else
75  progress += std::to_string(
76  VStateMachine::getSubIterationIndex());
77  }
78  else if(VStateMachine::getIterationWork())
79  {
80  // steps going on
81  progress += name_ + ":";
82 
83  // check for iteration alias
84  if(iterationAliasMap_.find(transitionName_) != iterationAliasMap_.end() &&
85  iterationAliasMap_.at(transitionName_)
86  .find(VStateMachine::getIterationIndex()) !=
87  iterationAliasMap_.at(transitionName_).end())
88  progress += iterationAliasMap_.at(transitionName_)
89  .at(VStateMachine::getIterationIndex());
90  else
91  progress +=
92  std::to_string(VStateMachine::getIterationIndex());
93  }
94  else if(transitionName_ != "")
95  progress += name_ + ":" + transitionName_;
96  // else Done
97 
98  // if(progress.size())
99  // __COUTV__(progress);
100 
101  return progress;
102  } // end getStatusProgressDetail()
103 
104  virtual unsigned int getMinReadyForEventGenerationStartIteration(void) const { return 0; }
105 
106  void setTransitionName(const std::string& transitionName)
107  {
108  transitionName_ = transitionName;
109  }
110  const std::string& getTransitionName(void) { return transitionName_; }
111  void setIterationIndex(unsigned int i) { iterationIndex_ = i; }
112  void setSubIterationIndex(unsigned int i) { subIterationIndex_ = i; }
113  unsigned int getIterationIndex(void) { return iterationIndex_; }
114  unsigned int getSubIterationIndex(void) { return subIterationIndex_; }
115  void setSystemMinReadyForEventGenerationStartIteration(unsigned int i) { systemMinReadyForEventGenerationStartIteration_ = i; }
116  unsigned int getSystemMinReadyForEventGenerationStartIteration(void) const { return systemMinReadyForEventGenerationStartIteration_; }
117  void indicateIterationWork(void) { iterationWorkFlag_ = true; }
118  void clearIterationWork(void) { iterationWorkFlag_ = false; }
119  bool getIterationWork(void) { return iterationWorkFlag_; }
120  void indicateSubIterationWork(void) { subIterationWorkFlag_ = true; }
121  void clearSubIterationWork(void) { subIterationWorkFlag_ = false; }
122  bool getSubIterationWork(void) { return subIterationWorkFlag_; }
123 
126  protected:
127  std::map<std::string /*transition*/,
128  std::map<unsigned int /*step index*/, std::string /*step alias*/>>
129  iterationAliasMap_;
130  std::map<std::string /*transition*/,
131  std::map<unsigned int /*step index*/, std::string /*step alias*/>>
132  subIterationAliasMap_;
133 
134  private:
135  unsigned int iterationIndex_, subIterationIndex_;
136  unsigned int systemMinReadyForEventGenerationStartIteration_ = 0;
137  bool iterationWorkFlag_, subIterationWorkFlag_;
138  const std::string name_;
139  std::string transitionName_;
140 };
141 
142 } // namespace ots
143 
144 #endif
virtual std::string getStatusProgressDetail(void)
Status.
Definition: VStateMachine.h:44
virtual bool running(void)
States.
Definition: VStateMachine.h:33
CoreSupervisorBase * parentSupervisor_
virtual void configure(void)=0
Transitions.
defines used also by OtsConfigurationWizardSupervisor