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 namespace ariles
17 {
18  namespace defaults
19  {
21  {
22  public:
25 
26  public:
28  {
29  default_double_value_ = ARILES_DEFAULT_DOUBLE_VALUE;
30  default_float_value_ = ARILES_DEFAULT_FLOAT_VALUE;
31  }
32 
33  template <typename t_Scalar>
34  inline t_Scalar getDefault() const
35  {
36  return 0;
37  }
38  };
39 
40 
41  class ARILES_VISIBILITY_ATTRIBUTE Visitor : public ariles::visitor::Base<defaults::Parameters>
42  {
43  public:
45 
46 
47  public:
49 
50  template <class t_Ariles>
51  const Parameters &getParameters(const t_Ariles &ariles_class) const
52  {
53  return (ariles_class.arilesGetParameters(*this));
54  }
55 
56  template <class t_Entry>
57  void start(t_Entry &entry, const std::string &name, const Parameters &param) const
58  {
60  this->operator()(entry, name, param);
61  }
62 
63 
64  template <class t_Entry>
65  void operator()(t_Entry &entry, const std::string &name, const Parameters &param) const
66  {
67  ARILES_UNUSED_ARG(name);
69  ARILES_TRACE_ENTRY(name);
70  ARILES_TRACE_TYPE(entry);
71  apply_defaults(*this, entry, param);
72  }
73  };
74 
75  template <>
76  inline double Visitor::Parameters::getDefault<double>() const
77  {
78  return default_double_value_;
79  }
80 
81  template <>
82  inline float Visitor::Parameters::getDefault<float>() const
83  {
84  return default_float_value_;
85  }
86 
87  template <>
88  inline bool Visitor::Parameters::getDefault<bool>() const
89  {
90  return false;
91  }
92 
93  template <>
94  inline std::string Visitor::Parameters::getDefault<std::string>() const
95  {
96  return "";
97  }
98 
99 
100  class ARILES_VISIBILITY_ATTRIBUTE Base : public entry::Base<const defaults::Visitor>
101  {
102  public:
103  };
104 
105 
106 #ifndef ARILES_METHODS_defaults
107 # define ARILES_METHODS_defaults ARILES_METHODS(defaults, const, ARILES_EMPTY_MACRO)
108 #endif
109  } // namespace defaults
110 
111 
113 } // namespace ariles
#define ARILES_TRACE_FUNCTION
Definition: trace.h:118
void ARILES_VISIBILITY_ATTRIBUTE apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param, ARILES_IS_BASE_ENABLER(ariles::defaults::Base, t_Entry))
Definition: basic.h:234
defaults::Parameters Parameters
Definition: defaults.h:44
const Parameters & getParameters(const t_Ariles &ariles_class) const
Definition: defaults.h:51
#define ARILES_TRACE_TYPE(entry)
Definition: trace.h:120
t_Scalar getDefault() const
Definition: defaults.h:34
defaults::Visitor Defaults
Definition: defaults.h:112
void start(t_Entry &entry, const std::string &name, const Parameters &param) const
Definition: defaults.h:57
#define ARILES_VISIBILITY_ATTRIBUTE
Definition: helpers.h:69
#define ARILES_TRACE_ENTRY(entry_name)
Definition: trace.h:119
Definition: basic.h:17
void operator()(t_Entry &entry, const std::string &name, const Parameters &param) const
Definition: defaults.h:65