Ariles
Loading...
Searching...
No Matches
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
22namespace ariles2
23{
24 /// @ingroup defaults
25 namespace defaults
26 {
28 {
29 public:
32
33 public:
34 explicit 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 if constexpr (std::is_same_v<double, t_Scalar>)
53 {
55 }
56 if constexpr (std::is_same_v<float, t_Scalar>)
57 {
59 }
60 if constexpr (std::is_same_v<bool, t_Scalar>)
61 {
62 return false;
63 }
64 if constexpr (std::is_same_v<std::string, t_Scalar>)
65 {
66 return "";
67 }
68 return 0;
69 }
70 };
71
72
73 class Visitor : public ariles2::visitor::Base<Visitor, defaults::Parameters>
74 {
75 public:
77
78
79 public:
80 template <class t_Entry>
81 void visit(t_Entry &entry, const std::string &name, const Parameters &param) const
82 {
84 this->visitMapEntry(entry, name, param);
85 }
86
87 template <class t_Entry>
88 void visit(t_Entry &entry, const std::vector<std::string> &subtree, const Parameters &param) const
89 {
90 visit(entry, subtree.empty() ? "" : subtree.back(), param);
91 }
92
93
94 template <class t_Entry>
95 void visitMapEntry(t_Entry &entry, const std::string &name, const Parameters &param) const
96 {
97 CPPUT_UNUSED_ARG(name);
100 CPPUT_TRACE_TYPE(entry);
101 apply_defaults(*this, entry, param);
102 }
103 };
104
105
107
108
109#define ARILES2_NAMED_ENTRY_defaults(v, entry, name) visitor.visitMapEntry(entry, #name, parameters);
110#define ARILES2_PARENT_defaults(v, entry)
111#define ARILES2_VISIT_defaults \
112 template <class t_Visitor> /* cppcheck-suppress duplInheritedMember */ \
113 void arilesVisit( \
114 const t_Visitor &visitor, \
115 const typename t_Visitor::Parameters &parameters, \
116 ARILES2_IS_BASE_ENABLER(ariles2::defaults::Visitor, t_Visitor)) \
117 { \
118 CPPUT_TRACE_FUNCTION; \
119 CPPUT_UNUSED_ARG(visitor); \
120 CPPUT_UNUSED_ARG(parameters); \
121 arilesVisitParents(visitor, parameters); \
122 ARILES2_ENTRIES(defaults) \
123 }
124
125#define ARILES2_METHODS_defaults ARILES2_METHODS(defaults, const, ARILES2_EMPTY_MACRO)
126#define ARILES2_BASE_METHODS_defaults ARILES2_BASE_METHODS(defaults)
127 } // namespace defaults
128
129 /**
130 * @ingroup defaults
131 * @{
132 */
134 /// @}
135} // namespace ariles2
Parameters(const bool override_parameters=true)
Definition defaults.h:34
t_Scalar getDefault() const
Definition defaults.h:50
void visit(t_Entry &entry, const std::vector< std::string > &subtree, const Parameters &param) const
Definition defaults.h:88
void visitMapEntry(t_Entry &entry, const std::string &name, const Parameters &param) const
Definition defaults.h:95
void visit(t_Entry &entry, const std::string &name, const Parameters &param) const
Definition defaults.h:81
#define CPPUT_UNUSED_ARG(parameter)
Definition misc.h:19
void 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:232
#define CPPUT_TRACE_FUNCTION
Definition trace.h:126
#define CPPUT_TRACE_TYPE(type)
Definition trace.h:128
#define CPPUT_TRACE_VALUE(value)
Definition trace.h:127