Ariles
config.h
Go to the documentation of this file.
1 /**
2  @file
3  @author Alexander Sherikov
4 
5  @copyright 2017-2020 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  @todo compound visitor
10 */
11 
12 #pragma once
13 
14 #include "defaults.h"
15 #include "finalize.h"
16 #include "prewrite.h"
17 #include "read.h"
18 #include "write.h"
19 
20 /**
21 @defgroup config Configuration
22 @ingroup serialization
23 
24 @brief Configuration visitors (perform pre- and post- processing during (de)serialization)
25 */
26 
27 namespace ariles2
28 {
29  /// @ingroup config
30  namespace cfgread
31  {
32  template <class t_Reader>
34  {
35  public:
36  ariles2::preread::Visitor::Parameters preread_;
37  typename t_Reader::Parameters read_;
38  ariles2::postread::Visitor::Parameters postread_;
39 
40 
41  public:
42  Parameters(const bool override_parameters = true)
43  : preread_(override_parameters), read_(override_parameters), postread_(override_parameters)
44  {
45  }
46 
47  Parameters(const typename t_Reader::Parameters &param, const bool override_parameters = true)
48  : preread_(override_parameters), postread_(override_parameters)
49  {
50  this->read_ = param;
51  }
52 
54  const ariles2::preread::Visitor::Parameters &preread,
55  const typename t_Reader::Parameters &reader,
56  const ariles2::postread::Visitor::Parameters &postread)
57  {
58  this->preread_ = preread;
59  this->read_ = reader;
60  this->postread_ = postread;
61  }
62  };
63 
64 
65  template <class t_Reader>
67  : public visitor::Base<visitor::GenericVisitor, Parameters<t_Reader> >
68  {
69  public:
71 
72 
73  public:
75  t_Reader read_;
77 
78 
79  public:
80  template <class t_Initializer>
81  Visitor(t_Initializer &initializer) : read_(initializer)
82  {
83  ARILES2_TRACE_FUNCTION;
84  }
85 
86  template <class t_Initializer>
87  Visitor(const t_Initializer &initializer) : read_(initializer)
88  {
89  ARILES2_TRACE_FUNCTION;
90  }
91 
92  template <class t_Initializer0, class t_Initializer1>
93  Visitor(t_Initializer0 &initializer0, const t_Initializer1 &initializer1)
94  : read_(initializer0, initializer1)
95  {
96  ARILES2_TRACE_FUNCTION;
97  }
98 
99 
101 
102  template <class t_Ariles>
103  const Parameters getParameters(const t_Ariles &ariles_class) const
104  {
105  // static variable is potentially unsafe
106  return (Parameters(
107  ariles_class.arilesGetParameters(preread_),
108  ariles_class.arilesGetParameters(read_),
109  ariles_class.arilesGetParameters(postread_)));
110  }
111 
112 
113  template <class t_Entry>
114  void visit(t_Entry &entry, const std::string &name, const Parameters &param)
115  {
116  ARILES2_TRACE_FUNCTION;
117  ARILES2_TRACE_VALUE(name);
118  ARILES2_TRACE_TYPE(entry);
119  ariles2::apply(preread_, entry, name, param.preread_);
120  ariles2::apply(read_, entry, name, param.read_);
121  ariles2::apply(postread_, entry, name, param.postread_);
122  }
123 
124 
125  template <class t_Entry>
126  void visit(t_Entry &entry, const std::vector<std::string> &subtree, const Parameters &param)
127  {
128  ARILES2_TRACE_FUNCTION;
129  ARILES2_TRACE_TYPE(entry);
130  ariles2::apply(preread_, entry, true == subtree.empty() ? "" : subtree.back(), param.preread_);
131  ariles2::apply(read_, entry, subtree, param.read_);
132  ariles2::apply(postread_, entry, true == subtree.empty() ? "" : subtree.back(), param.postread_);
133  }
134 
135 
136  const t_Reader &getReader() const
137  {
138  return (read_);
139  }
140  };
141  } // namespace cfgread
142 } // namespace ariles2
143 
144 
145 namespace ariles2
146 {
147  /// @ingroup config
148  namespace cfgwrite
149  {
150  template <class t_Writer>
152  {
153  public:
155  typename t_Writer::Parameters write_;
156 
157 
158  public:
159  Parameters(const bool override_parameters = true)
160  : prewrite_(override_parameters), write_(override_parameters)
161  {
162  }
163 
164  Parameters(const typename t_Writer::Parameters &param, const bool override_parameters = true)
165  : prewrite_(override_parameters)
166  {
167  this->write_ = param;
168  }
169 
172  const typename t_Writer::Parameters &writer)
173  {
174  this->prewrite_ = prewrite;
175  this->write_ = writer;
176  }
177  };
178 
179 
180  template <class t_Writer>
182  : public visitor::Base<visitor::GenericVisitor, Parameters<t_Writer> >
183  {
184  public:
186 
187 
188  public:
190  t_Writer write_;
191 
192 
193  public:
194  template <class t_Initializer>
195  Visitor(t_Initializer &initializer) : write_(initializer)
196  {
197  ARILES2_TRACE_FUNCTION;
198  }
199 
200  template <class t_Initializer>
201  Visitor(const t_Initializer &initializer) : write_(initializer)
202  {
203  ARILES2_TRACE_FUNCTION;
204  }
205 
206  template <class t_Initializer0, class t_Initializer1>
207  Visitor(t_Initializer0 *initializer0, const t_Initializer1 &initializer1)
208  : write_(initializer0, initializer1)
209  {
210  ARILES2_TRACE_FUNCTION;
211  }
212 
213  template <class t_Initializer0, class t_Initializer1>
214  Visitor(t_Initializer0 &initializer0, const t_Initializer1 &initializer1)
215  : write_(initializer0, initializer1)
216  {
217  ARILES2_TRACE_FUNCTION;
218  }
219 
220 
222 
223  template <class t_Ariles>
224  const Parameters getParameters(const t_Ariles &ariles_class) const
225  {
226  // static variable is potentially unsafe
227  return (Parameters(
228  ariles_class.arilesGetParameters(prewrite_), ariles_class.arilesGetParameters(write_)));
229  }
230 
231 
232  template <class t_Entry>
233  void visit(t_Entry &entry, const std::string &name, const Parameters &param)
234  {
235  ARILES2_TRACE_FUNCTION;
236  ARILES2_TRACE_VALUE(name);
237  ARILES2_TRACE_TYPE(entry);
238  ariles2::apply(prewrite_, entry, name, param.prewrite_);
239  ariles2::apply(write_, entry, name, param.write_);
240  }
241 
242 
243  const t_Writer &getWriter() const
244  {
245  return (write_);
246  }
247 
248 
249  t_Writer &getWriter()
250  {
251  return (write_);
252  }
253  };
254  } // namespace cfgwrite
255 } // namespace ariles2
ariles2::cfgread::Visitor::postread_
ariles2::postread::Visitor postread_
Definition: config.h:76
ariles2
Definition: basic.h:16
ariles2::visitor::Base
Definition: common.h:50
ariles2::cfgwrite::Visitor::getWriter
t_Writer & getWriter()
Definition: config.h:249
ariles2::cfgwrite::Visitor::Visitor
Visitor(t_Initializer &initializer)
Definition: config.h:195
defaults.h
ariles2::cfgread::Visitor::Visitor
Visitor(t_Initializer &initializer)
Definition: config.h:81
ariles2::cfgread::Visitor
Definition: config.h:66
ariles2::cfgread::Visitor::visit
void visit(t_Entry &entry, const std::vector< std::string > &subtree, const Parameters &param)
Definition: config.h:126
ariles2::cfgwrite::Parameters::prewrite_
ariles2::prewrite::Visitor::Parameters prewrite_
Definition: config.h:154
ariles2::cfgwrite::Visitor::write_
t_Writer write_
Definition: config.h:190
ariles2::ns_graphviz::impl::Visitor
class ARILES2_VISIBILITY_ATTRIBUTE Visitor
Definition: graphviz.h:37
ariles2::cfgread::Parameters::read_
t_Reader::Parameters read_
Definition: config.h:37
ariles2::cfgwrite::Visitor::Parameters
cfgwrite::Parameters< t_Writer > Parameters
Definition: config.h:185
ariles2::cfgread::Visitor::visit
void visit(t_Entry &entry, const std::string &name, const Parameters &param)
Definition: config.h:114
finalize.h
ariles2::cfgwrite::Parameters::Parameters
Parameters(const ariles2::prewrite::Visitor::Parameters &prewrite, const typename t_Writer::Parameters &writer)
Definition: config.h:170
ariles2::cfgread::Visitor::Parameters
cfgread::Parameters< t_Reader > Parameters
Definition: config.h:70
ariles2::cfgwrite::Visitor::prewrite_
ariles2::prewrite::Visitor prewrite_
Definition: config.h:189
ariles2::apply
t_Visitor::ReturnType apply(t_Visitor &visitor, t_Ariles &ariles_class, const t_Subtree &subtree, const typename t_Visitor::Parameters &param, ARILES2_IS_ANY_OF(t_Subtree, std::string, std::vector< std::string >), ARILES2_IS_BASE_ENABLER(ariles2::visitor::Visitor, t_Visitor))
Definition: common.h:126
ariles2::process::Visitor< const prewrite::Visitor, prewrite::Parameters >::Parameters
prewrite::Parameters Parameters
Definition: process.h:30
ariles2::prewrite::Visitor
Definition: prewrite.h:37
ariles2::cfgwrite::Parameters::write_
t_Writer::Parameters write_
Definition: config.h:155
ARILES2_VISIBILITY_ATTRIBUTE
#define ARILES2_VISIBILITY_ATTRIBUTE
Definition: helpers.h:138
prewrite.h
ariles2::cfgread::Visitor::Visitor
Visitor(const t_Initializer &initializer)
Definition: config.h:87
ariles2::cfgread::Visitor::getParameters
const Parameters getParameters(const t_Ariles &ariles_class) const
Definition: config.h:103
ariles2::cfgwrite::Visitor::getParameters
const Parameters getParameters(const t_Ariles &ariles_class) const
Definition: config.h:224
ariles2::cfgread::Parameters::postread_
ariles2::postread::Visitor::Parameters postread_
Definition: config.h:38
ariles2::cfgwrite::Parameters
Definition: config.h:151
ariles2::cfgread::Visitor::preread_
ariles2::preread::Visitor preread_
Definition: config.h:74
ariles2::cfgwrite::Visitor::Visitor
Visitor(t_Initializer0 *initializer0, const t_Initializer1 &initializer1)
Definition: config.h:207
ariles2::cfgwrite::Visitor::getWriter
const t_Writer & getWriter() const
Definition: config.h:243
ariles2::cfgwrite::Parameters::Parameters
Parameters(const bool override_parameters=true)
Definition: config.h:159
ariles2::cfgwrite::Visitor::Visitor
Visitor(const t_Initializer &initializer)
Definition: config.h:201
ariles2::cfgwrite::Visitor
Definition: config.h:181
ariles2::cfgwrite::Visitor::Visitor
Visitor(t_Initializer0 &initializer0, const t_Initializer1 &initializer1)
Definition: config.h:214
ariles2::cfgread::Parameters
Definition: config.h:33
ariles2::cfgwrite::Visitor::visit
void visit(t_Entry &entry, const std::string &name, const Parameters &param)
Definition: config.h:233
ariles2::cfgread::Parameters::preread_
ariles2::preread::Visitor::Parameters preread_
Definition: config.h:36
ariles2::cfgread::Visitor::getReader
const t_Reader & getReader() const
Definition: config.h:136
ariles2::cfgread::Visitor::Visitor
Visitor(t_Initializer0 &initializer0, const t_Initializer1 &initializer1)
Definition: config.h:93
ariles2::cfgread::Visitor::read_
t_Reader read_
Definition: config.h:75
ariles2::cfgwrite::Parameters::Parameters
Parameters(const typename t_Writer::Parameters &param, const bool override_parameters=true)
Definition: config.h:164
ariles2::cfgread::Parameters::Parameters
Parameters(const bool override_parameters=true)
Definition: config.h:42
write.h
ariles2::cfgread::Parameters::Parameters
Parameters(const typename t_Reader::Parameters &param, const bool override_parameters=true)
Definition: config.h:47
ariles2::cfgread::Parameters::Parameters
Parameters(const ariles2::preread::Visitor::Parameters &preread, const typename t_Reader::Parameters &reader, const ariles2::postread::Visitor::Parameters &postread)
Definition: config.h:53
read.h