Ariles
generic_pointer.h
Go to the documentation of this file.
1 /**
2  @file
3  @author Alexander Sherikov
4 
5  @copyright 2017-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 namespace ariles
12 {
13  namespace read
14  {
15  template <class t_Visitor, typename t_Entry>
17  t_Visitor &visitor,
18  ARILES_POINTER_TYPE<t_Entry> &entry,
19  const typename t_Visitor::Parameters &parameters)
20  {
22  bool is_null = true;
23 
24  ariles::ConfigurableFlags param = parameters;
26 
27  visitor.template startMap<t_Visitor::SIZE_LIMIT_RANGE>(1, 2);
28  visitor(is_null, "is_null", param);
29 
30  if (true == is_null)
31  {
32  PointerHandler<ARILES_POINTER_TYPE<t_Entry> >::reset(entry);
33  }
34  else
35  {
36  PointerHandler<ARILES_POINTER_TYPE<t_Entry> >::allocate(entry);
37  visitor(*entry, "value", param);
38  }
39  visitor.endMap();
40  }
41  } // namespace read
42 } // namespace ariles
43 
44 
45 namespace ariles
46 {
47  namespace write
48  {
49  template <class t_Visitor, typename t_Entry>
51  t_Visitor &writer,
52  const ARILES_POINTER_TYPE<t_Entry> &entry,
53  const typename t_Visitor::Parameters &param)
54  {
56  bool is_null = true;
57 
58  if (PointerHandler<ARILES_POINTER_TYPE<t_Entry> >::isNull(entry))
59  {
60  is_null = true;
61  writer.startMap(1);
62  writer(is_null, "is_null", param);
63  writer.endMap();
64  }
65  else
66  {
67  is_null = false;
68  writer.startMap(2);
69  writer(is_null, "is_null", param);
70  writer(*entry, "value", param);
71  writer.endMap();
72  }
73  }
74  } // namespace write
75 } // namespace ariles
76 
77 
78 namespace ariles
79 {
80  namespace compare
81  {
82  template <class t_Visitor, typename t_Entry>
84  t_Visitor &visitor,
85  const ARILES_POINTER_TYPE<t_Entry> &left,
86  const ARILES_POINTER_TYPE<t_Entry> &right,
87  const typename t_Visitor::Parameters &param)
88  {
90  if (true == PointerHandler<ARILES_POINTER_TYPE<t_Entry> >::isNull(left))
91  {
92  if (false == PointerHandler<ARILES_POINTER_TYPE<t_Entry> >::isNull(right))
93  {
94  visitor.equal_ = false;
95  }
96  }
97  else
98  {
99  if (true == PointerHandler<ARILES_POINTER_TYPE<t_Entry> >::isNull(right))
100  {
101  visitor.equal_ = false;
102  }
103  else
104  {
105  apply_compare(visitor, *left, *right, param);
106  }
107  }
108  }
109  } // namespace compare
110 } // namespace ariles
111 
112 
113 namespace ariles
114 {
115  namespace defaults
116  {
117  template <class t_Visitor, typename t_Entry>
119  const t_Visitor & /*visitor*/,
120  ARILES_POINTER_TYPE<t_Entry> &entry,
121  const typename t_Visitor::Parameters & /*param*/)
122  {
124  PointerHandler<ARILES_POINTER_TYPE<t_Entry> >::reset(entry);
125  }
126  } // namespace defaults
127 } // namespace ariles
128 
129 
130 namespace ariles
131 {
132  namespace process
133  {
134  template <class t_Visitor, typename t_Entry>
136  const t_Visitor &visitor,
137  ARILES_POINTER_TYPE<t_Entry> &entry,
138  const typename t_Visitor::Parameters &param)
139  {
141  if (false == (PointerHandler<ARILES_POINTER_TYPE<t_Entry> >::isNull(entry)))
142  {
143  apply_process(visitor, *entry, param);
144  }
145  }
146  } // namespace process
147 } // namespace ariles
148 
149 
150 #undef ARILES_POINTER_HANDLER
151 #undef ARILES_POINTER_TYPE
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_process(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param, ARILES_IS_BASE_ENABLER(ariles::Ariles, t_Entry))
Definition: basic.h:278
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
class ARILES_VISIBILITY_ATTRIBUTE PointerHandler
Definition: helpers.h:114
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