RunController.h
Go to the documentation of this file.
1 #ifndef _fwk_RunManager_h_
2 #define _fwk_RunManager_h_
3 
4 #include <fwk/VModule.h>
5 #include <fwk/RunData.h>
6 #include <utl/Stopwatch.h>
7 #include <utl/RealTimeStopwatch.h>
8 #include <utl/Singleton.h>
9 #include <string>
10 #include <set>
11 #include <map>
12 
13 
14 namespace utl {
15  class Reader;
16  class Branch;
17 }
18 
19 namespace evt {
20  class Event;
21 }
22 
23 
24 namespace fwk {
25 
26  class RunController : public utl::Singleton<RunController> {
27 
28  public:
29  enum BreakStatus {
33  };
34 
36  int GetNumberOfRegisteredModules() const;
37 
39  // Should this be removed? Note that it will create modules that don't
40  // already exist.
41  std::string GetRegisteredModuleNames() const;
42 
44  const std::set<std::string>& GetUsedModuleNames() const
45  { return fUsedModuleNames; }
46 
48  VModule& GetModule(const std::string& moduleName) const;
49  bool HasModule(const std::string& moduleName) const;
50 
52  evt::Event& GetCurrentEvent() const { return *fCurEvent; }
53 
55  const std::string& GetCurrentModule() const { return fCurrentModule; }
56 
57  RunData& GetRunData() const { return fRunData; }
58 
59  virtual void Init();
60  virtual void Run();
61  virtual void Finish();
62 
63  protected:
64  RunController();
65  virtual ~RunController();
66 
67  void InitBranch(utl::Branch& currentB);
68  void RunBranch(utl::Branch& currentB);
69  void FinishBranch(utl::Branch& currentB);
70 
71  private:
72  static std::string GetBreakStatusByName(const BreakStatus status);
73  void DoRunSequence(utl::Branch& currentB);
75  void GetNextModuleName(utl::Branch& currentB);
76 
77  std::set<std::string> fUniqueModuleNames;
78 
79  mutable std::set<std::string> fUsedModuleNames;
80 
81  evt::Event* fCurEvent = nullptr;
82 
85  std::string fCurrentModule;
86  mutable RunData fRunData;
87 
89 
90  };
91 
92 
93 }
94 
95 
96 #endif
bool HasModule(const std::string &moduleName) const
std::set< std::string > fUsedModuleNames
Definition: RunController.h:79
std::string GetRegisteredModuleNames() const
Get list of all module builder names and module versions in the registry.
virtual void Init()
void RunBranch(utl::Branch &currentB)
static std::string GetBreakStatusByName(const BreakStatus status)
Class representing a document branch.
Definition: Branch.h:107
const std::string & GetCurrentModule() const
Get the name of the currently running module.
Definition: RunController.h:55
Auger Software Run Control.
Definition: RunController.h:26
Module interface.
Definition: VModule.h:53
int GetNumberOfRegisteredModules() const
Return number of registered modules.
void DoRunSequence(utl::Branch &currentB)
evt::Event * fCurEvent
Definition: RunController.h:81
void GetNextModuleName(utl::Branch &currentB)
std::string fCurrentModule
Definition: RunController.h:85
virtual void Finish()
const std::set< std::string > & GetUsedModuleNames() const
Get a set of the names of all modules accessed thus far in the run.
Definition: RunController.h:44
evt::Event & GetCurrentEvent() const
Get Event currently being processed.
Definition: RunController.h:52
void FinishBranch(utl::Branch &currentB)
utl::RealTimeStopwatch fRealTimeStopwatch
Definition: RunController.h:84
RunData & GetRunData() const
Definition: RunController.h:57
void InitBranch(utl::Branch &currentB)
virtual ~RunController()
utl::Stopwatch fStopwatch
Definition: RunController.h:83
virtual void Run()
std::set< std::string > fUniqueModuleNames
Definition: RunController.h:77
VModule & GetModule(const std::string &moduleName) const
Get module by name.
BreakStatus DoNextInSequence(utl::Branch &currentB)
Curiously Recurring Template Pattern (CRTP) for Meyers singleton.
Definition: Singleton.h:36

, generated on Tue Sep 26 2023.