Ariles
Loading...
Searching...
No Matches
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
15namespace 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*/ = 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
39namespace 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
61namespace 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
85namespace 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
111namespace 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
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
#define CPPUT_TRACE_FUNCTION
Definition trace.h:126