BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MultiOption.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Fit/Tools/MultiOption.h
6 //! @brief Declares class MultiOption
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
15 #ifdef SWIG
16 #error no need to expose this header to Swig
17 #endif
18 
19 #ifndef USER_API
20 #ifndef BORNAGAIN_FIT_TOOLS_MULTIOPTION_H
21 #define BORNAGAIN_FIT_TOOLS_MULTIOPTION_H
22 
23 #include <boost/variant.hpp>
24 #include <string>
25 
26 //! Stores a single option for minimization algorithm. Int, double, string values are available.
27 //! Relies on boost::variant, will be switched to std::variant in C++-17.
28 //! @ingroup fitting_internal
29 
30 class MultiOption {
31 public:
32  using variant_t = boost::variant<int, double, std::string>;
33 
34  explicit MultiOption(const std::string& name = "");
35 
36  template <typename T>
37  explicit MultiOption(const std::string& name, const T& t, const std::string& descripion = "");
38 
39  std::string name() const;
40 
41  std::string description() const;
42  void setDescription(const std::string& description);
43 
44  variant_t& value();
46 
47  //! Returns the option's value
48  template <typename T> T get() const;
49 
50  //! Returns the option's default value (i.e. used during construction)
51  template <typename T> T getDefault() const;
52 
53  void setFromString(const std::string& value);
54 
55 private:
56  std::string m_name;
57  std::string m_description;
60 };
61 
62 template <typename T>
63 MultiOption::MultiOption(const std::string& name, const T& t, const std::string& descripion)
64 {
65  m_name = name;
66  m_description = descripion;
67  m_value = t;
68  m_default_value = t;
69 }
70 
71 template <typename T> T MultiOption::get() const
72 {
73  return boost::get<T>(m_value);
74 }
75 
76 template <typename T> T MultiOption::getDefault() const
77 {
78  return boost::get<T>(m_default_value);
79 }
80 
81 #endif // BORNAGAIN_FIT_TOOLS_MULTIOPTION_H
82 #endif // USER_API
Stores a single option for minimization algorithm.
Definition: MultiOption.h:30
T getDefault() const
Returns the option's default value (i.e. used during construction)
Definition: MultiOption.h:76
MultiOption(const std::string &name="")
Definition: MultiOption.cpp:18
void setFromString(const std::string &value)
Sets the value of option from string.
Definition: MultiOption.cpp:48
variant_t & defaultValue()
Definition: MultiOption.cpp:40
variant_t m_value
Definition: MultiOption.h:58
void setDescription(const std::string &description)
Definition: MultiOption.cpp:30
variant_t m_default_value
Definition: MultiOption.h:59
std::string name() const
Definition: MultiOption.cpp:20
std::string m_name
Definition: MultiOption.h:56
variant_t & value()
Definition: MultiOption.cpp:35
std::string description() const
Definition: MultiOption.cpp:25
boost::variant< int, double, std::string > variant_t
Definition: MultiOption.h:32
T get() const
Returns the option's value.
Definition: MultiOption.h:71
std::string m_description
Definition: MultiOption.h:57
QString const & name(EShape k)
Definition: particles.cpp:21