Iguana LATEST
Implementation Guardian of Analysis Algorithms
Loading...
Searching...
No Matches
AlgorithmSequence.h
1#pragma once
2
3#include "Algorithm.h"
4
5namespace iguana {
6
46 {
47
49
50 private: // hooks
51 void StartHook(hipo::banklist& banks) override;
52 bool RunHook(hipo::banklist& banks) const override;
53 void StopHook() override;
54
55 public:
56
66 void Add(std::string const& algo_class_name, std::string const& algo_instance_name = "");
67
76 template <class ALGORITHM>
77 void Add(std::string_view algo_instance_name = "")
78 {
79 if(algo_instance_name == "")
80 Add(std::make_unique<ALGORITHM>());
81 else
82 Add(std::make_unique<ALGORITHM>(algo_instance_name));
83 }
84
93 void Add(algo_t&& algo);
94
103 template <class ALGORITHM = Algorithm>
104 ALGORITHM* Get(std::string const& algo_instance_name)
105 {
106 if(auto it{m_algo_names.find(algo_instance_name)}; it != m_algo_names.end())
107 return dynamic_cast<ALGORITHM*>(m_sequence[it->second].get());
108 m_log->Error("cannot find algorithm '{}' in sequence", algo_instance_name);
109 throw std::runtime_error("cannot Get algorithm");
110 }
111
117 template <typename OPTION_TYPE>
118 void SetOption(std::string const& algo_instance_name, std::string const& key, const OPTION_TYPE val)
119 {
120 Get<Algorithm>(algo_instance_name)->SetOption(key, val);
121 }
122
127 void SetLogLevel(std::string const& algo_instance_name, std::string const& lev)
128 {
129 Get<Algorithm>(algo_instance_name)->SetLogLevel(lev);
130 }
131
134 void SetName(std::string_view name);
135
140 std::vector<std::string> GetCreatedBankNames(std::string const& algo_instance_name) const noexcept(false);
141
146 std::string GetCreatedBankName(std::string const& algo_instance_name) const noexcept(false);
147
150 void PrintSequence(Logger::Level level = Logger::info) const;
151
157 void SetConfigFileForEachAlgorithm(std::string const& name);
158
164 void SetConfigDirectoryForEachAlgorithm(std::string const& name);
165
173 void ForEachAlgorithm(std::function<void(algo_t&)> func);
174
183 hipo::banklist::size_type GetBankIndex(
184 hipo::banklist& banks,
185 std::string const& bank_name,
186 std::string const& algo_instance_name) const noexcept(false);
187
195 hipo::banklist::size_type GetCreatedBankIndex(
196 hipo::banklist& banks,
197 std::string const& algo_instance_name) const noexcept(false);
198
199 private:
200
202 std::vector<algo_t> m_sequence;
203
205 std::unordered_map<std::string, std::vector<algo_t>::size_type> m_algo_names;
206 };
207}
#define DEFINE_IGUANA_ALGORITHM(ALGO_NAME, ALGO_FULL_NAME)
Algorithm: An algorithm that can run a sequence of algorithms
hipo::banklist::size_type GetCreatedBankIndex(hipo::banklist &banks, std::string const &algo_instance_name) const noexcept(false)
void SetConfigDirectoryForEachAlgorithm(std::string const &name)
Set a custom configuration file directory for each algorithm in the sequence.
void Add(std::string_view algo_instance_name="")
std::vector< std::string > GetCreatedBankNames(std::string const &algo_instance_name) const noexcept(false)
void Add(algo_t &&algo)
void Add(std::string const &algo_class_name, std::string const &algo_instance_name="")
ALGORITHM * Get(std::string const &algo_instance_name)
void ForEachAlgorithm(std::function< void(algo_t &)> func)
Call a function for each algorithm in the sequence.
void SetConfigFileForEachAlgorithm(std::string const &name)
Set a custom configuration file for each algorithm in the sequence.
std::string GetCreatedBankName(std::string const &algo_instance_name) const noexcept(false)
void SetOption(std::string const &algo_instance_name, std::string const &key, const OPTION_TYPE val)
hipo::banklist::size_type GetBankIndex(hipo::banklist &banks, std::string const &bank_name, std::string const &algo_instance_name) const noexcept(false)
void SetName(std::string_view name)
void PrintSequence(Logger::Level level=Logger::info) const
void SetLogLevel(std::string const &algo_instance_name, std::string const &lev)
Set an algorithm log level.
Algorithm(std::string_view name)
Definition Algorithm.h:73
std::unique_ptr< Logger > m_log
Logger instance for this object
Definition Object.h:52