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 
14 namespace ariles
15 {
16  namespace read
17  {
18  template <class t_Visitor, class t_BetterEnum, class t_Flags>
20  t_Visitor &visitor,
21  t_BetterEnum &entry,
22  const t_Flags & /*param*/,
23  const typename t_BetterEnum::_integral * /*dummy*/ = NULL,
24  const typename t_BetterEnum::_value_iterable * /*dummy*/ = NULL,
25  const typename t_BetterEnum::_name_iterable * /*dummy*/ = NULL,
26  const typename t_BetterEnum::_value_iterator * /*dummy*/ = NULL,
27  const typename t_BetterEnum::_name_iterator * /*dummy*/ = NULL)
28  {
30  std::string enum_value;
31  visitor.readElement(enum_value);
32  entry = t_BetterEnum::_from_string(enum_value.c_str());
33  }
34  } // namespace read
35 } // namespace ariles
36 
37 
38 namespace ariles
39 {
40  namespace write
41  {
42  template <class t_Visitor, class t_BetterEnum, class t_Flags>
44  t_Visitor &writer,
45  const t_BetterEnum &entry,
46  const t_Flags & /*param*/,
47  const typename t_BetterEnum::_integral * /*dummy*/ = NULL,
48  const typename t_BetterEnum::_value_iterable * /*dummy*/ = NULL,
49  const typename t_BetterEnum::_name_iterable * /*dummy*/ = NULL,
50  const typename t_BetterEnum::_value_iterator * /*dummy*/ = NULL,
51  const typename t_BetterEnum::_name_iterator * /*dummy*/ = NULL)
52  {
54  writer.writeElement(std::string(entry._to_string()));
55  }
56  } // namespace write
57 } // namespace ariles
58 
59 
60 namespace ariles
61 {
62  namespace compare
63  {
64  template <class t_Visitor, class t_BetterEnum>
66  t_Visitor &visitor,
67  const t_BetterEnum &left,
68  const t_BetterEnum &right,
69  const typename t_Visitor::Parameters & /*param*/,
70  const typename t_BetterEnum::_integral * /*dummy*/ = NULL,
71  const typename t_BetterEnum::_value_iterable * /*dummy*/ = NULL,
72  const typename t_BetterEnum::_name_iterable * /*dummy*/ = NULL,
73  const typename t_BetterEnum::_value_iterator * /*dummy*/ = NULL,
74  const typename t_BetterEnum::_name_iterator * /*dummy*/ = NULL)
75  {
77  visitor.equal_ &= (left == right);
78  }
79  } // namespace compare
80 } // namespace ariles
81 
82 
83 
84 namespace ariles
85 {
86  namespace defaults
87  {
88  template <class t_Visitor, class t_BetterEnum>
90  t_Visitor & /*visitor*/,
91  t_BetterEnum &entry,
92  const typename t_Visitor::Parameters & /*param*/,
93  const typename t_BetterEnum::_integral * /*dummy*/ = NULL,
94  const typename t_BetterEnum::_value_iterable * /*dummy*/ = NULL,
95  const typename t_BetterEnum::_name_iterable * /*dummy*/ = NULL,
96  const typename t_BetterEnum::_value_iterator * /*dummy*/ = NULL,
97  const typename t_BetterEnum::_name_iterator * /*dummy*/ = NULL)
98  {
100  if (t_BetterEnum::_size() > 0)
101  {
102  entry = t_BetterEnum::_values()[0];
103  }
104  }
105  } // namespace defaults
106 } // namespace ariles
void ARILES_VISIBILITY_ATTRIBUTE apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param, ARILES_IS_BASE_ENABLER(ariles::Ariles, t_Left))
Definition: basic.h:149
#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
void ARILES_VISIBILITY_ATTRIBUTE apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters &param, ARILES_IS_BASE_ENABLER(ariles::write::Base, t_Entry))
Definition: basic.h:96
#define ARILES_VISIBILITY_ATTRIBUTE
Definition: helpers.h:69
void ARILES_VISIBILITY_ATTRIBUTE apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &parameters, ARILES_IS_BASE_ENABLER(ariles::read::Base, t_Entry))
Definition: basic.h:22
Definition: basic.h:17