32#include <unordered_map>
93template <
typename Derived,
typename Base = ObjectHandle>
95 static_assert(std::is_base_of_v<ObjectHandle, Base>);
120 return m_parameters.contains(
name);
124 for (
auto const &p :
params) {
125 if (m_parameters.contains(p.name)) {
126 m_parameters.erase(p.name);
127 if (
auto const it = std::ranges::find(m_key_order, p.name);
128 it != m_key_order.end()) {
129 m_key_order.erase(
it);
132 m_key_order.emplace_back(p.name);
133 m_parameters.emplace(p.name, std::move(p));
142 auto const view = std::views::elements<0>(m_parameters);
148 return m_parameters.at(
name).get();
149 }
catch (std::out_of_range
const &) {
156 m_parameters.at(
name).set(value);
159 }
catch (std::out_of_range
const &) {
164 std::vector<std::pair<std::string, Variant>>
168 for (
auto const &
key : m_key_order) {
176 std::unordered_map<std::string, AutoParameter> m_parameters;
178 std::vector<std::string> m_key_order;
Bind parameters in the script interface.
AutoParameters(std::vector< AutoParameter > &¶ms)
bool has_parameter(std::string const &name) const override
void do_set_parameter(const std::string &name, const Variant &value) final
~AutoParameters() override=default
std::vector< std::string_view > valid_parameters() const final
Variant get_parameter(const std::string &name) const final
std::vector< std::pair< std::string, Variant > > serialize_parameters() const final
void add_parameters(std::vector< AutoParameter > &¶ms)
auto const & get_parameter_insertion_order() const
VariantMap get_parameters() const
Get current parameters.
std::string_view name() const
T get_value(Variant const &v)
Extract value of specific type T from a Variant.
static SteepestDescentParameters params
Currently active steepest descent instance.
Exception thrown when accessing an unknown parameter.
UnknownParameter(std::string const &name)
Exception thrown when writing to a read-only parameter.
WriteError(std::string const &name)
Recursive variant implementation.