Ariles
better_enums.h
Go to the documentation of this file.
1 /**
2  @file
3  @author Alexander Sherikov
4 
5  @copyright 2018 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 "../internal/helpers.h"
14 
15 namespace ariles2
16 {
17  namespace read
18  {
19  template <class t_Visitor, class t_BetterEnum, class t_Flags>
21  t_Visitor &visitor,
22  t_BetterEnum &entry,
23  const t_Flags & /*param*/,
24  const typename t_BetterEnum::_integral * /*dummy*/ = NULL,
25  const typename t_BetterEnum::_value_iterable * /*dummy*/ = NULL,
26  const typename t_BetterEnum::_name_iterable * /*dummy*/ = NULL,
27  const typename t_BetterEnum::_value_iterator * /*dummy*/ = NULL,
28  const typename t_BetterEnum::_name_iterator * /*dummy*/ = NULL)
29  {
30  ARILES2_TRACE_FUNCTION;
31  std::string enum_value;
32  visitor.readElement(enum_value);
33  entry = t_BetterEnum::_from_string_nocase(enum_value.c_str());
34  }
35  } // namespace read
36 } // namespace ariles2
37 
38 
39 namespace ariles2
40 {
41  namespace write
42  {
43  template <class t_Visitor, class t_BetterEnum, class t_Flags>
45  t_Visitor &writer,
46  const t_BetterEnum &entry,
47  const t_Flags &param,
48  const typename t_BetterEnum::_integral * /*dummy*/ = NULL,
49  const typename t_BetterEnum::_value_iterable * /*dummy*/ = NULL,
50  const typename t_BetterEnum::_name_iterable * /*dummy*/ = NULL,
51  const typename t_BetterEnum::_value_iterator * /*dummy*/ = NULL,
52  const typename t_BetterEnum::_name_iterator * /*dummy*/ = NULL)
53  {
54  ARILES2_TRACE_FUNCTION;
55  writer.writeElement(std::string(entry._to_string()), param);
56  }
57  } // namespace write
58 } // namespace ariles2
59 
60 
61 namespace ariles2
62 {
63  namespace compare
64  {
65  template <class t_Visitor, class t_BetterEnum>
67  t_Visitor &visitor,
68  const t_BetterEnum &left,
69  const t_BetterEnum &right,
70  const typename t_Visitor::Parameters & /*param*/,
71  const typename t_BetterEnum::_integral * /*dummy*/ = NULL,
72  const typename t_BetterEnum::_value_iterable * /*dummy*/ = NULL,
73  const typename t_BetterEnum::_name_iterable * /*dummy*/ = NULL,
74  const typename t_BetterEnum::_value_iterator * /*dummy*/ = NULL,
75  const typename t_BetterEnum::_name_iterator * /*dummy*/ = NULL)
76  {
77  ARILES2_TRACE_FUNCTION;
78  visitor.equal_ &= (left == right);
79  }
80  } // namespace compare
81 } // namespace ariles2
82 
83 
84 
85 namespace ariles2
86 {
87  namespace defaults
88  {
89  template <class t_Visitor, class t_BetterEnum>
91  t_Visitor & /*visitor*/,
92  t_BetterEnum &entry,
93  const typename t_Visitor::Parameters & /*param*/,
94  const typename t_BetterEnum::_integral * /*dummy*/ = NULL,
95  const typename t_BetterEnum::_value_iterable * /*dummy*/ = NULL,
96  const typename t_BetterEnum::_name_iterable * /*dummy*/ = NULL,
97  const typename t_BetterEnum::_value_iterator * /*dummy*/ = NULL,
98  const typename t_BetterEnum::_name_iterator * /*dummy*/ = NULL)
99  {
100  ARILES2_TRACE_FUNCTION;
101  if (t_BetterEnum::_size() > 0)
102  {
103  entry = t_BetterEnum::_values()[0];
104  }
105  }
106  } // namespace defaults
107 } // namespace ariles2
108 
109 
110 
111 namespace ariles2
112 {
113  namespace copyfrom
114  {
115  template <class t_Visitor, class t_BetterEnum>
117  t_Visitor & /*visitor*/,
118  t_BetterEnum &left,
119  const t_BetterEnum &right,
120  const typename t_Visitor::Parameters & /*param*/,
121  const typename t_BetterEnum::_integral * /*dummy*/ = NULL,
122  const typename t_BetterEnum::_value_iterable * /*dummy*/ = NULL,
123  const typename t_BetterEnum::_name_iterable * /*dummy*/ = NULL,
124  const typename t_BetterEnum::_value_iterator * /*dummy*/ = NULL,
125  const typename t_BetterEnum::_name_iterator * /*dummy*/ = NULL)
126  {
127  ARILES2_TRACE_FUNCTION;
128  left = right;
129  }
130  } // namespace copyfrom
131 
132 
133  namespace copyto
134  {
135  template <class t_Visitor, class t_BetterEnum>
137  t_Visitor & /*visitor*/,
138  const t_BetterEnum &left,
139  t_BetterEnum &right,
140  const typename t_Visitor::Parameters & /*param*/,
141  const typename t_BetterEnum::_integral * /*dummy*/ = NULL,
142  const typename t_BetterEnum::_value_iterable * /*dummy*/ = NULL,
143  const typename t_BetterEnum::_name_iterable * /*dummy*/ = NULL,
144  const typename t_BetterEnum::_value_iterator * /*dummy*/ = NULL,
145  const typename t_BetterEnum::_name_iterator * /*dummy*/ = NULL)
146  {
147  ARILES2_TRACE_FUNCTION;
148  right = left;
149  }
150  } // namespace copyto
151 } // namespace ariles2
ariles2::copyfrom::apply_copyfrom
void ARILES2_VISIBILITY_ATTRIBUTE apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::Ariles, t_Left))
Definition: basic.h:323
ariles2
Definition: basic.h:16
ariles2::write::apply_write
void ARILES2_VISIBILITY_ATTRIBUTE apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters &parameters, ARILES2_IS_BASE_ENABLER(ariles2::write::Base, t_Entry))
Definition: basic.h:85
t_Visitor
ariles2::compare::apply_compare
void ARILES2_VISIBILITY_ATTRIBUTE apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::Ariles, t_Left))
Definition: basic.h:146
ARILES2_VISIBILITY_ATTRIBUTE
#define ARILES2_VISIBILITY_ATTRIBUTE
Definition: helpers.h:138
ariles2::read::apply_read
void ARILES2_VISIBILITY_ATTRIBUTE apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &parameters, ARILES2_IS_BASE_ENABLER(ariles2::read::Base, t_Entry))
Definition: basic.h:21
ariles2::copyto::apply_copyto
void ARILES2_VISIBILITY_ATTRIBUTE apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::Ariles, t_Left))
Definition: basic.h:369
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