1 #ifndef _ots_VStateMachine_h_
2 #define _ots_VStateMachine_h_
8 class CoreSupervisorBase;
19 : subsystemIterationIndex_(0)
21 , subIterationIndex_(0)
22 , subsystemIterationWorkFlag_(false)
23 , iterationWorkFlag_(false)
24 , subIterationWorkFlag_(false)
33 virtual void halt(
void) = 0;
34 virtual void pause(
void) = 0;
35 virtual void resume(
void) = 0;
36 virtual void start(std::string runNumber) = 0;
37 virtual void stop(
void) = 0;
40 virtual bool running(
void) {
return false; }
41 virtual void paused(
void) { ; }
42 virtual void halted(
void) { ; }
43 virtual void configured(
void) { ; }
44 virtual void initial(
void) { ; }
45 virtual void inError(
void) { ; }
53 std::string progress =
"";
55 if(VStateMachine::getSubIterationWork())
58 progress += name_ +
":";
61 if(subsystemIterationAliasMap_.find(transitionName_) != subsystemIterationAliasMap_.end() &&
62 subsystemIterationAliasMap_.at(transitionName_)
63 .find(VStateMachine::getSubsystemIterationIndex()) !=
64 subsystemIterationAliasMap_.at(transitionName_).end())
65 progress += subsystemIterationAliasMap_.at(transitionName_)
66 .at(VStateMachine::getSubsystemIterationIndex());
68 progress += VStateMachine::getSubsystemIterationIndexString();
73 if(iterationAliasMap_.find(transitionName_) != iterationAliasMap_.end() &&
74 iterationAliasMap_.at(transitionName_)
75 .find(VStateMachine::getIterationIndex()) !=
76 iterationAliasMap_.at(transitionName_).end())
77 progress += iterationAliasMap_.at(transitionName_)
78 .at(VStateMachine::getIterationIndex());
81 std::to_string(VStateMachine::getIterationIndex());
86 if(subIterationAliasMap_.find(transitionName_) !=
87 subIterationAliasMap_.end() &&
88 subIterationAliasMap_.at(transitionName_)
89 .find(VStateMachine::getSubIterationIndex()) !=
90 subIterationAliasMap_.at(transitionName_).end())
91 progress += subIterationAliasMap_.at(transitionName_)
92 .at(VStateMachine::getSubIterationIndex());
94 progress += std::to_string(
95 VStateMachine::getSubIterationIndex());
97 else if(VStateMachine::getIterationWork())
100 progress += name_ +
":";
103 if(subsystemIterationAliasMap_.find(transitionName_) != subsystemIterationAliasMap_.end() &&
104 subsystemIterationAliasMap_.at(transitionName_)
105 .find(VStateMachine::getSubsystemIterationIndex()) !=
106 subsystemIterationAliasMap_.at(transitionName_).end())
107 progress += subsystemIterationAliasMap_.at(transitionName_)
108 .at(VStateMachine::getSubsystemIterationIndex());
110 progress += VStateMachine::getSubsystemIterationIndexString();
115 if(iterationAliasMap_.find(transitionName_) != iterationAliasMap_.end() &&
116 iterationAliasMap_.at(transitionName_)
117 .find(VStateMachine::getIterationIndex()) !=
118 iterationAliasMap_.at(transitionName_).end())
119 progress += iterationAliasMap_.at(transitionName_)
120 .at(VStateMachine::getIterationIndex());
123 std::to_string(VStateMachine::getIterationIndex());
125 else if(VStateMachine::getSubsystemIterationWork())
128 progress += name_ +
":";
131 if(subsystemIterationAliasMap_.find(transitionName_) != subsystemIterationAliasMap_.end() &&
132 subsystemIterationAliasMap_.at(transitionName_)
133 .find(VStateMachine::getSubsystemIterationIndex()) !=
134 subsystemIterationAliasMap_.at(transitionName_).end())
135 progress += subsystemIterationAliasMap_.at(transitionName_)
136 .at(VStateMachine::getSubsystemIterationIndex());
138 progress += VStateMachine::getSubsystemIterationIndexString();
140 else if(transitionName_ !=
"")
141 progress += name_ +
":" + transitionName_;
150 virtual unsigned int getMinReadyForEventGenerationStartIteration(
void)
const {
return 0; }
152 void setTransitionName(
const std::string& transitionName)
154 transitionName_ = transitionName;
156 const std::string& getTransitionName(
void) {
return transitionName_; }
159 void setSubsystemIterationIndex(
unsigned int i) { subsystemIterationIndex_ = i; }
160 unsigned int getSubsystemIterationIndex(
void)
const {
return subsystemIterationIndex_; }
165 return (subsystemIterationIndex_ == 0 || isStandaloneSubsystem()) &&
166 iterationIndex_ == 0 && subIterationIndex_ == 0;
168 std::string getSubsystemIterationIndexString(
void)
const
170 return isStandaloneSubsystem() ? std::string(
"standalone")
171 : std::to_string(subsystemIterationIndex_);
179 return isStandaloneSubsystem() ? iterationIndex_ : subsystemIterationIndex_;
181 void indicateSubsystemSyncStepWork(
void)
183 if(isStandaloneSubsystem())
184 iterationWorkFlag_ =
true;
186 subsystemIterationWorkFlag_ =
true;
188 void indicateSubsystemIterationWork(
void) { subsystemIterationWorkFlag_ =
true; }
189 void clearSubsystemIterationWork(
void) { subsystemIterationWorkFlag_ =
false; }
190 bool getSubsystemIterationWork(
void) {
return subsystemIterationWorkFlag_; }
193 void setIterationIndex(
unsigned int i) { iterationIndex_ = i; }
194 void setSubIterationIndex(
unsigned int i) { subIterationIndex_ = i; }
195 unsigned int getIterationIndex(
void) {
return iterationIndex_; }
196 unsigned int getSubIterationIndex(
void) {
return subIterationIndex_; }
197 void setSystemMinReadyForEventGenerationStartIteration(
unsigned int i) { systemMinReadyForEventGenerationStartIteration_ = i; }
198 unsigned int getSystemMinReadyForEventGenerationStartIteration(
void)
const {
return systemMinReadyForEventGenerationStartIteration_; }
199 void indicateIterationWork(
void) { iterationWorkFlag_ =
true; }
200 void clearIterationWork(
void) { iterationWorkFlag_ =
false; }
201 bool getIterationWork(
void) {
return iterationWorkFlag_; }
204 void indicateSubIterationWork(
void) { subIterationWorkFlag_ =
true; }
205 void clearSubIterationWork(
void) { subIterationWorkFlag_ =
false; }
206 bool getSubIterationWork(
void) {
return subIterationWorkFlag_; }
211 std::map<std::string ,
212 std::map<
unsigned int , std::string >>
213 subsystemIterationAliasMap_;
214 std::map<std::string ,
215 std::map<
unsigned int , std::string >>
217 std::map<std::string ,
218 std::map<
unsigned int , std::string >>
219 subIterationAliasMap_;
222 unsigned int subsystemIterationIndex_, iterationIndex_, subIterationIndex_;
223 unsigned int systemMinReadyForEventGenerationStartIteration_ = 0;
224 bool subsystemIterationWorkFlag_, iterationWorkFlag_, subIterationWorkFlag_;
225 const std::string name_;
226 std::string transitionName_;
virtual std::string getStatusProgressDetail(void)
Status.
virtual bool running(void)
States.
bool isFirstIteration(void) const
true on the very first call of a transition (all indices at their starting value)
CoreSupervisorBase * parentSupervisor_
virtual void configure(void)=0
Transitions.
unsigned int getSubsystemSyncStepIndex(void) const
static const unsigned int SUBSYSTEM_ITERATION_STANDALONE
defines used also by OtsConfigurationWizardSupervisor