Iguana
1.2.1
Implementation Guardian of Analysis Algorithms
Toggle main menu visibility
Loading...
Searching...
No Matches
AlgorithmSequence.h
1
#pragma once
2
3
#include "Algorithm.h"
4
5
namespace
iguana {
6
45
class
AlgorithmSequence
:
public
Algorithm
46
{
47
48
DEFINE_IGUANA_ALGORITHM
(
AlgorithmSequence
, seq)
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_IGUANA_ALGORITHM
#define DEFINE_IGUANA_ALGORITHM(ALGO_NAME, ALGO_FULL_NAME)
Definition
AlgorithmBoilerplate.h:55
iguana::AlgorithmSequence
Algorithm: An algorithm that can run a sequence of algorithms
Definition
AlgorithmSequence.h:46
iguana::AlgorithmSequence::GetCreatedBankIndex
hipo::banklist::size_type GetCreatedBankIndex(hipo::banklist &banks, std::string const &algo_instance_name) const noexcept(false)
iguana::AlgorithmSequence::SetConfigDirectoryForEachAlgorithm
void SetConfigDirectoryForEachAlgorithm(std::string const &name)
Set a custom configuration file directory for each algorithm in the sequence.
iguana::AlgorithmSequence::Add
void Add(std::string_view algo_instance_name="")
Definition
AlgorithmSequence.h:77
iguana::AlgorithmSequence::GetCreatedBankNames
std::vector< std::string > GetCreatedBankNames(std::string const &algo_instance_name) const noexcept(false)
iguana::AlgorithmSequence::Add
void Add(algo_t &&algo)
iguana::AlgorithmSequence::Add
void Add(std::string const &algo_class_name, std::string const &algo_instance_name="")
iguana::AlgorithmSequence::Get
ALGORITHM * Get(std::string const &algo_instance_name)
Definition
AlgorithmSequence.h:104
iguana::AlgorithmSequence::ForEachAlgorithm
void ForEachAlgorithm(std::function< void(algo_t &)> func)
Call a function for each algorithm in the sequence.
iguana::AlgorithmSequence::SetConfigFileForEachAlgorithm
void SetConfigFileForEachAlgorithm(std::string const &name)
Set a custom configuration file for each algorithm in the sequence.
iguana::AlgorithmSequence::GetCreatedBankName
std::string GetCreatedBankName(std::string const &algo_instance_name) const noexcept(false)
iguana::AlgorithmSequence::SetOption
void SetOption(std::string const &algo_instance_name, std::string const &key, const OPTION_TYPE val)
Definition
AlgorithmSequence.h:118
iguana::AlgorithmSequence::GetBankIndex
hipo::banklist::size_type GetBankIndex(hipo::banklist &banks, std::string const &bank_name, std::string const &algo_instance_name) const noexcept(false)
iguana::AlgorithmSequence::SetName
void SetName(std::string_view name)
iguana::AlgorithmSequence::PrintSequence
void PrintSequence(Logger::Level level=Logger::info) const
iguana::AlgorithmSequence::SetLogLevel
void SetLogLevel(std::string const &algo_instance_name, std::string const &lev)
Set an algorithm log level.
Definition
AlgorithmSequence.h:127
iguana::Algorithm::Algorithm
Algorithm(std::string_view name)
Definition
Algorithm.h:74
iguana::Logger::Level
Level
Definition
Logger.h:37
iguana::Object::m_log
std::unique_ptr< Logger > m_log
Logger instance for this object
Definition
Object.h:52
iguana_v1.2.1
src
iguana
algorithms
AlgorithmSequence.h
Generated by
1.18.0