tdaq-develop-2025-02-12
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 +=
76  std::to_string(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  void setTransitionName(const std::string& transitionName)
105  {
106  transitionName_ = transitionName;
107  }
108  const std::string& getTransitionName(void) { return transitionName_; }
109  void setIterationIndex(unsigned int i) { iterationIndex_ = i; }
110  void setSubIterationIndex(unsigned int i) { subIterationIndex_ = i; }
111  unsigned int getIterationIndex(void) { return iterationIndex_; }
112  unsigned int getSubIterationIndex(void) { return subIterationIndex_; }
113  void indicateIterationWork(void) { iterationWorkFlag_ = true; }
114  void clearIterationWork(void) { iterationWorkFlag_ = false; }
115  bool getIterationWork(void) { return iterationWorkFlag_; }
116  void indicateSubIterationWork(void) { subIterationWorkFlag_ = true; }
117  void clearSubIterationWork(void) { subIterationWorkFlag_ = false; }
118  bool getSubIterationWork(void) { return subIterationWorkFlag_; }
119 
122  protected:
123  std::map<std::string /*transition*/,
124  std::map<unsigned int /*step index*/, std::string /*step alias*/>>
125  iterationAliasMap_;
126  std::map<std::string /*transition*/,
127  std::map<unsigned int /*step index*/, std::string /*step alias*/>>
128  subIterationAliasMap_;
129 
130  private:
131  unsigned int iterationIndex_, subIterationIndex_;
132  bool iterationWorkFlag_, subIterationWorkFlag_;
133  const std::string name_;
134  std::string transitionName_;
135 };
136 
137 } // namespace ots
138 
139 #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.