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>
20  void apply_read(
21  t_Visitor &visitor,
22  t_BetterEnum &entry,
23  const t_Flags & /*param*/,
24  const typename t_BetterEnum::_integral * /*dummy*/ = nullptr,
25  const typename t_BetterEnum::_value_iterable * /*dummy*/ = nullptr,
26  const typename t_BetterEnum::_name_iterable * /*dummy*/ = nullptr,
27  const typename t_BetterEnum::_value_iterator * /*dummy*/ = nullptr,
28  const typename t_BetterEnum::_name_iterator * /*dummy*/ = nullptr)
29  {
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*/ = nullptr,
49  const typename t_BetterEnum::_value_iterable * /*dummy*/ = nullptr,
50  const typename t_BetterEnum::_name_iterable * /*dummy*/ = nullptr,
51  const typename t_BetterEnum::_value_iterator * /*dummy*/ = nullptr,
52  const typename t_BetterEnum::_name_iterator * /*dummy*/ = nullptr)
53  {
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*/ = nullptr,
72  const typename t_BetterEnum::_value_iterable * /*dummy*/ = nullptr,
73  const typename t_BetterEnum::_name_iterable * /*dummy*/ = nullptr,
74  const typename t_BetterEnum::_value_iterator * /*dummy*/ = nullptr,
75  const typename t_BetterEnum::_name_iterator * /*dummy*/ = nullptr)
76  {
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*/ = nullptr,
95  const typename t_BetterEnum::_value_iterable * /*dummy*/ = nullptr,
96  const typename t_BetterEnum::_name_iterable * /*dummy*/ = nullptr,
97  const typename t_BetterEnum::_value_iterator * /*dummy*/ = nullptr,
98  const typename t_BetterEnum::_name_iterator * /*dummy*/ = nullptr)
99  {
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*/ = nullptr,
122  const typename t_BetterEnum::_value_iterable * /*dummy*/ = nullptr,
123  const typename t_BetterEnum::_name_iterable * /*dummy*/ = nullptr,
124  const typename t_BetterEnum::_value_iterator * /*dummy*/ = nullptr,
125  const typename t_BetterEnum::_name_iterator * /*dummy*/ = nullptr)
126  {
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*/ = nullptr,
142  const typename t_BetterEnum::_value_iterable * /*dummy*/ = nullptr,
143  const typename t_BetterEnum::_name_iterable * /*dummy*/ = nullptr,
144  const typename t_BetterEnum::_value_iterator * /*dummy*/ = nullptr,
145  const typename t_BetterEnum::_name_iterator * /*dummy*/ = nullptr)
146  {
148  right = left;
149  }
150  } // namespace copyto
151 } // namespace ariles2
void apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param)
Definition: basic.h:140
void apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param)
Definition: basic.h:307
void apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters &param)
Definition: basic.h:353
visitor::Parameters Parameters
Definition: count.h:26
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
void 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
void 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:82
Definition: basic.h:17
#define CPPUT_TRACE_FUNCTION
Definition: trace.h:126