6#include <nlohmann/json.hpp>
10#include "vipra/input/json.hpp"
12#include "vipra/modules.hpp"
13#include "vipra/random/random.hpp"
24 void register_param(Modules::Type module, std::string
const& moduleName,
25 std::string
const& paramName);
27 [[nodiscard]]
auto has_param(Modules::Type module, std::string
const& moduleName,
28 std::string
const& paramName)
const -> bool;
30 std::string
const& moduleName,
31 std::string
const& paramName)
const -> bool;
34 [[nodiscard]]
auto get_used_parameters()
const -> std::string
36 return _usedParameters.dump();
39 template <
typename data_t>
40 [[nodiscard]]
auto get_param(Modules::Type module, std::string
const& moduleName,
42 -> std::remove_cvref_t<data_t>;
46 std::map<Modules::Type, std::map<std::string, std::set<std::string>>> _params;
49 mutable nlohmann::json _usedParameters;
51 template <
typename array_t>
52 auto get_array_param(Modules::Type module, std::string
const& moduleName,
53 std::string
const& paramName)
const -> array_t;
55 [[nodiscard]]
auto contains(Modules::Type module, std::string
const& moduleName,
56 std::string
const& paramName)
const ->
bool
58 return _params.contains(module) && _params.at(module).contains(moduleName) &&
59 _params.at(module).at(moduleName).contains(paramName);
70 void record_param(Modules::Type module, std::string
const& moduleName,
71 std::string
const& paramName,
auto const& value)
const
73 _usedParameters[to_string(module)][moduleName][paramName] = value;
86template <
typename data_t>
88 std::string
const& paramName,
91 using param_t = std::remove_cvref_t<data_t>;
93 std::string moduleStr = to_string(module);
96 if ( ! contains(module, moduleName, paramName) ) {
97 throw std::runtime_error(
"Parameter: " + paramName +
" For " + to_string(module) +
98 " Module: " + moduleName +
" Not Registered");
102 auto value = std::optional<param_t>{};
105 value = get_array_param<param_t>(module, moduleName, paramName);
109 value = _input.get_param<param_t>(moduleStr, moduleName, paramName, engine);
112 if ( ! value.has_value() ) {
114 throw std::runtime_error(
"Required Parameter: " + paramName +
" For " +
115 to_string(module) +
" Module: " + moduleName +
116 " Not Provided In Input");
119 record_param(module, moduleName, paramName, value.value());
121 return param_t{std::move(value.value())};
134template <
typename array_t>
135auto Parameters::get_array_param(Modules::Type module, std::string
const& moduleName,
136 std::string
const& paramName)
const -> array_t
138 std::string moduleStr = to_string(module);
140 if ( ! contains(module, moduleName, paramName) )
141 throw std::runtime_error(
"Parameter: " + paramName +
" For " + to_string(module) +
142 " Module: " + moduleName +
" Not Registered");
144 auto value = _input.get<array_t>({moduleStr, moduleName, paramName});
145 if ( ! value.has_value() ) {
146 throw std::runtime_error(
"Required Parameter: " + paramName +
" For " +
147 to_string(module) +
" Module: " + moduleName +
148 " Not Provided In Input");
151 return value.value();
Definition parameters.hpp:20
auto has_param(Modules::Type module, std::string const &moduleName, std::string const ¶mName) const -> bool
Returns true if the parameter exists, otherwise false.
Definition parameters.cpp:46
auto has_required_param(Modules::Type module, std::string const &moduleName, std::string const ¶mName) const -> bool
Returns true if the parameter exists, otherwise false.
Definition parameters.cpp:61
auto get_param(Modules::Type module, std::string const &moduleName, std::string const ¶mName, Random::Engine &engine) const -> std::remove_cvref_t< data_t >
Returns the value of the parameter if it exists, otherwise throws an error.
Definition parameters.hpp:87
void register_param(Modules::Type module, std::string const &moduleName, std::string const ¶mName)
Registers a parameter for a module.
Definition parameters.cpp:28
void reset()
Clears the parameters, does NOT reset the input module.
Definition parameters.cpp:12
Psuedo Random number engine.
Definition random.hpp:22
Utility struct that gets whether a type is a specialization of another templated type.
Definition template_specialization.hpp:14