15 #ifndef BORNAGAIN_FIT_TOOLS_OPTIONCONTAINER_H
16 #define BORNAGAIN_FIT_TOOLS_OPTIONCONTAINER_H
30 using option_t = std::shared_ptr<MultiOption>;
31 using container_t = std::vector<option_t>;
32 using iterator = container_t::iterator;
33 using const_iterator = container_t::const_iterator;
40 option_t addOption(
const std::string& optionName, T value,
const std::string& description =
"");
42 option_t option(
const std::string& optionName);
43 const option_t option(
const std::string& optionName)
const;
45 template <
class T> T optionValue(
const std::string& optionName)
const;
48 template <
class T>
void setOptionValue(
const std::string& optionName, T value);
50 iterator begin() {
return m_options.begin(); }
51 const_iterator begin()
const {
return m_options.begin(); }
53 iterator end() {
return m_options.end(); }
54 const_iterator end()
const {
return m_options.end(); }
56 size_t size()
const {
return m_options.size(); }
57 bool empty()
const {
return size() == 0; }
60 bool exists(
const std::string& name);
62 container_t m_options;
66 OptionContainer::option_t OptionContainer::addOption(
const std::string& optionName, T value,
67 const std::string& description)
69 if (exists(optionName))
70 throw std::runtime_error(
"OptionContainer::addOption() -> Error. Option '" + optionName
73 option_t result(
new MultiOption(optionName, value, description));
74 m_options.push_back(result);
78 template <
class T> T OptionContainer::optionValue(
const std::string& optionName)
const
80 return option(optionName)->get<T>();
85 option(optionName)->value() = value;
86 if (option(optionName)->value().which() != option(optionName)->defaultValue().which())
87 throw std::runtime_error(
88 "OptionContainer::setOptionValue() -> Error. Attempt to set different"
Declares class MultiOption.
Stores a single option for minimization algorithm.
Stores multi option (int,double,string) in a container.
void setOptionValue(const std::string &optionName, T value)
Sets the value of option. Option should hold same value type already.