Ariles
defaults.h
Go to the documentation of this file.
1 /**
2  @file
3  @author Alexander Sherikov
4 
5  @copyright 2017-2020 Alexander Sherikov, Licensed under the Apache License, Version 2.0.
6  (see @ref LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
7 
8  @brief
9 */
10 
11 #pragma once
12 
13 #include <limits>
14 #include "common.h"
15 
16 /**
17 @defgroup defaults Defaults (PreRead)
18 
19 @brief Initializes entries to their default values.
20 */
21 
22 namespace ariles2
23 {
24  /// @ingroup defaults
25  namespace defaults
26  {
28  {
29  public:
32 
33  public:
34  Parameters(const bool override_parameters = true) : visitor::Parameters(override_parameters)
35  {
36 #ifdef ARILES2_DEFAULT_DOUBLE_VALUE
37  default_double_value_ = ARILES2_DEFAULT_DOUBLE_VALUE;
38 #else
39  default_double_value_ = std::numeric_limits<double>::signaling_NaN();
40 #endif
41 
42 #ifdef ARILES2_DEFAULT_FLOAT_VALUE
43  default_float_value_ = ARILES2_DEFAULT_FLOAT_VALUE;
44 #else
45  default_float_value_ = std::numeric_limits<float>::signaling_NaN();
46 #endif
47  }
48 
49  template <typename t_Scalar>
50  inline t_Scalar getDefault() const
51  {
52  return 0;
53  }
54  };
55 
56 
58  : public ariles2::visitor::Base<visitor::GenericVisitor, defaults::Parameters>
59  {
60  public:
62 
63 
64  public:
66 
67  template <class t_Ariles>
68  const Parameters &getParameters(const t_Ariles &ariles_class) const
69  {
70  return (ariles_class.arilesGetParameters(*this));
71  }
72 
73  template <class t_Entry>
74  void visit(t_Entry &entry, const std::string &name, const Parameters &param) const
75  {
76  ARILES2_TRACE_FUNCTION;
77  this->visitMapEntry(entry, name, param);
78  }
79 
80 
81  template <class t_Entry>
82  void visitMapEntry(t_Entry &entry, const std::string &name, const Parameters &param) const
83  {
84  ARILES2_UNUSED_ARG(name);
85  ARILES2_TRACE_FUNCTION;
86  ARILES2_TRACE_VALUE(name);
87  ARILES2_TRACE_TYPE(entry);
88  apply_defaults(*this, entry, param);
89  }
90  };
91 
92  template <>
93  inline double Visitor::Parameters::getDefault<double>() const
94  {
95  return default_double_value_;
96  }
97 
98  template <>
99  inline float Visitor::Parameters::getDefault<float>() const
100  {
101  return default_float_value_;
102  }
103 
104  template <>
105  inline bool Visitor::Parameters::getDefault<bool>() const
106  {
107  return false;
108  }
109 
110  template <>
111  inline std::string Visitor::Parameters::getDefault<std::string>() const
112  {
113  return "";
114  }
115 
116 
117  class ARILES2_VISIBILITY_ATTRIBUTE Base : public entry::Base<const defaults::Visitor>
118  {
119  public:
120  };
121 
122 
123 #define ARILES2_NAMED_ENTRY_defaults(v, entry, name) visitor.visitMapEntry(entry, #name, parameters);
124 #define ARILES2_PARENT_defaults(v, entry)
125 #define ARILES2_VISIT_defaults \
126  template <class t_Visitor> \
127  void arilesVisit( \
128  const t_Visitor &visitor, \
129  const typename t_Visitor::Parameters &parameters, \
130  ARILES2_IS_BASE_ENABLER(ariles2::defaults::Visitor, t_Visitor)) \
131  { \
132  ARILES2_TRACE_FUNCTION; \
133  ARILES2_UNUSED_ARG(visitor); \
134  ARILES2_UNUSED_ARG(parameters); \
135  arilesVisitParents(visitor, parameters); \
136  ARILES2_ENTRIES(defaults) \
137  }
138 
139 #define ARILES2_METHODS_defaults ARILES2_METHODS(defaults, const, ARILES2_EMPTY_MACRO)
140 #define ARILES2_BASE_METHODS_defaults ARILES2_BASE_METHODS(defaults)
141  } // namespace defaults
142 
143  /**
144  * @ingroup defaults
145  * @{
146  */
147  namespace preread = defaults;
150  /// @}
151 } // namespace ariles2
ariles2
Definition: basic.h:16
ariles2::visitor::Base
Definition: common.h:50
ariles2::defaults::Visitor
Definition: defaults.h:57
ariles2::entry::Base
Definition: common.h:86
ariles2::defaults::Parameters::getDefault
t_Scalar getDefault() const
Definition: defaults.h:50
ariles2::defaults::Base
Definition: defaults.h:117
common.h
ariles2::defaults::Parameters::default_float_value_
float default_float_value_
Definition: defaults.h:31
ariles2::defaults::Visitor::Parameters
defaults::Parameters Parameters
Definition: defaults.h:61
ariles2::defaults::Parameters::default_double_value_
double default_double_value_
Definition: defaults.h:30
ariles2::defaults::Parameters::Parameters
Parameters(const bool override_parameters=true)
Definition: defaults.h:34
ARILES2_VISIBILITY_ATTRIBUTE
#define ARILES2_VISIBILITY_ATTRIBUTE
Definition: helpers.h:138
ariles2::visitor::Parameters
Definition: common.h:20
ariles2::defaults::Visitor::visit
void visit(t_Entry &entry, const std::string &name, const Parameters &param) const
Definition: defaults.h:74
ariles2::Defaults
defaults::Visitor Defaults
Definition: defaults.h:149
ariles2::defaults::Visitor::visitMapEntry
void visitMapEntry(t_Entry &entry, const std::string &name, const Parameters &param) const
Definition: defaults.h:82
ariles2::defaults::apply_defaults
void ARILES2_VISIBILITY_ATTRIBUTE apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::defaults::Base, t_Entry))
Definition: basic.h:237
ariles2::defaults::Visitor::getParameters
const Parameters & getParameters(const t_Ariles &ariles_class) const
Definition: defaults.h:68
ariles2::PreRead
preread::Visitor PreRead
Definition: defaults.h:148
ariles2::defaults::Parameters
Definition: defaults.h:27