51 void StartHook(hipo::banklist& banks)
override;
52 bool RunHook(hipo::banklist& banks)
const override;
53 void StopHook()
override;
66 void Add(std::string
const& algo_class_name, std::string
const& algo_instance_name =
"");
76 template <
class ALGORITHM>
77 void Add(std::string_view algo_instance_name =
"")
79 if(algo_instance_name ==
"")
80 Add(std::make_unique<ALGORITHM>());
82 Add(std::make_unique<ALGORITHM>(algo_instance_name));
93 void Add(algo_t&& algo);
103 template <
class ALGORITHM = Algorithm>
104 ALGORITHM*
Get(std::string
const& algo_instance_name)
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");
117 template <
typename OPTION_TYPE>
118 void SetOption(std::string
const& algo_instance_name, std::string
const& key,
const OPTION_TYPE val)
127 void SetLogLevel(std::string
const& algo_instance_name, std::string
const& lev)
140 std::vector<std::string>
GetCreatedBankNames(std::string
const& algo_instance_name)
const noexcept(
false);
184 hipo::banklist& banks,
185 std::string
const& bank_name,
186 std::string
const& algo_instance_name)
const noexcept(
false);
196 hipo::banklist& banks,
197 std::string
const& algo_instance_name)
const noexcept(
false);
202 std::vector<algo_t> m_sequence;
205 std::unordered_map<std::string, std::vector<algo_t>::size_type> m_algo_names;
#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(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)
std::unique_ptr< Logger > m_log
Logger instance for this object