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 #ifndef ARILES_API_VERSION
15 # define ARILES_API_VERSION 1
16 #endif
17 
18 #include "defaults.h"
19 #include "postprocess.h"
20 #include "preprocess.h"
21 #include "read.h"
22 #include "write.h"
23 
24 namespace ariles
25 {
26  namespace cfgread
27  {
28 #if 1 == ARILES_API_VERSION
29  template <class t_Reader>
31  {
32  public:
33  template <class t_Initializer>
34  Visitor(t_Initializer &initializer) : t_Reader(initializer)
35  {
37  }
38 
39  template <class t_Initializer>
40  Visitor(const t_Initializer &initializer) : t_Reader(initializer)
41  {
43  }
44 
45  template <class t_Initializer0, class t_Initializer1>
46  Visitor(t_Initializer0 &initializer0, const t_Initializer1 &initializer1)
47  : t_Reader(initializer0, initializer1)
48  {
50  }
51  };
52 #endif
53 
54 #if 2 == ARILES_API_VERSION
55  template <class t_Reader>
56  class ARILES_VISIBILITY_ATTRIBUTE Parameters
57  {
58  public:
59  ariles::defaults::Visitor::Parameters defaults_parameters_;
60  typename t_Reader::Parameters reader_parameters_;
61  ariles::postprocess::Visitor::Parameters postprocess_parameters_;
62 
63 
64  public:
65  Parameters()
66  {
67  }
68 
69  Parameters(const int &param)
70  {
71  this->reader_parameters_ = param;
72  }
73 
74  Parameters(const typename t_Reader::Parameters &param)
75  {
76  this->reader_parameters_ = param;
77  }
78 
79  Parameters(
80  const ariles::defaults::Visitor::Parameters &defaults_parameters,
81  const typename t_Reader::Parameters &reader_parameters,
82  const ariles::postprocess::Visitor::Parameters &postprocess_parameters)
83  {
84  this->defaults_parameters_ = defaults_parameters;
85  this->reader_parameters_ = reader_parameters;
86  this->postprocess_parameters_ = postprocess_parameters;
87  }
88  };
89 
90 
91  template <class t_Reader>
92  class ARILES_VISIBILITY_ATTRIBUTE Visitor : public visitor::Base<Parameters<t_Reader> >
93  {
94  public:
95  typedef cfgread::Parameters<t_Reader> Parameters;
96 
97 
98  public:
99  ariles::defaults::Visitor defaults_visitor_;
100  t_Reader reader_visitor_;
101  ariles::postprocess::Visitor postprocess_visitor_;
102 
103 
104  public:
105  template <class t_Initializer>
106  Visitor(t_Initializer &initializer) : reader_visitor_(initializer)
107  {
109  }
110 
111  template <class t_Initializer>
112  Visitor(const t_Initializer &initializer) : reader_visitor_(initializer)
113  {
115  }
116 
117  template <class t_Initializer0, class t_Initializer1>
118  Visitor(t_Initializer0 &initializer0, const t_Initializer1 &initializer1)
119  : reader_visitor_(initializer0, initializer1)
120  {
122  }
123 
124 
126 
127  template <class t_Ariles>
128  const Parameters getParameters(const t_Ariles &ariles_class) const
129  {
130  // static variable is potentially unsafe
131  return (Parameters(
132  ariles_class.arilesGetParameters(defaults_visitor_),
133  ariles_class.arilesGetParameters(reader_visitor_),
134  ariles_class.arilesGetParameters(postprocess_visitor_)));
135  }
136 
137 
138  template <class t_Entry>
139  void start(t_Entry &entry, const std::string &name, const Parameters &param)
140  {
142  this->operator()(entry, name, param);
143  }
144 
145 
146  template <class t_Entry>
147  void operator()(t_Entry &entry, const std::string &name, const Parameters &param)
148  {
150  ARILES_TRACE_ENTRY(name);
151  ARILES_TRACE_TYPE(entry);
152  ariles::apply(defaults_visitor_, entry, name, param.defaults_parameters_);
153  ariles::apply(reader_visitor_, entry, name, param.reader_parameters_);
154  ariles::apply(postprocess_visitor_, entry, name, param.postprocess_parameters_);
155  }
156 
157 
158  const t_Reader &getReader() const
159  {
160  return (reader_visitor_);
161  }
162  };
163 #endif
164  } // namespace cfgread
165 } // namespace ariles
166 
167 
168 namespace ariles
169 {
170  namespace cfgwrite
171  {
172 #if 1 == ARILES_API_VERSION
173  template <class t_Writer>
175  {
176  public:
177  template <class t_Initializer>
178  Visitor(t_Initializer &initializer) : t_Writer(initializer)
179  {
181  }
182 
183  template <class t_Initializer>
184  Visitor(const t_Initializer &initializer) : t_Writer(initializer)
185  {
187  }
188 
189  template <class t_Initializer0, class t_Initializer1>
190  Visitor(t_Initializer0 *initializer0, const t_Initializer1 &initializer1)
191  : t_Writer(initializer0, initializer1)
192  {
194  }
195 
196  template <class t_Initializer0, class t_Initializer1>
197  Visitor(t_Initializer0 &initializer0, const t_Initializer1 &initializer1)
198  : t_Writer(initializer0, initializer1)
199  {
201  }
202 
203  const t_Writer &getWriter() const
204  {
205  return (*this);
206  }
207  };
208 #endif
209 
210 
211 #if 2 == ARILES_API_VERSION
212  template <class t_Writer>
213  class ARILES_VISIBILITY_ATTRIBUTE Parameters
214  {
215  public:
216  ariles::preprocess::Visitor::Parameters preprocess_parameters_;
217  typename t_Writer::Parameters writer_parameters_;
218 
219 
220  public:
221  Parameters()
222  {
223  }
224 
225  Parameters(const int &param)
226  {
227  this->writer_parameters_ = param;
228  }
229 
230  Parameters(const typename t_Writer::Parameters &param)
231  {
232  this->writer_parameters_ = param;
233  }
234 
235  Parameters(
236  const ariles::preprocess::Visitor::Parameters &preprocess_parameters,
237  const typename t_Writer::Parameters &writer_parameters)
238  {
239  this->preprocess_parameters_ = preprocess_parameters;
240  this->writer_parameters_ = writer_parameters;
241  }
242  };
243 
244 
245  template <class t_Writer>
246  class ARILES_VISIBILITY_ATTRIBUTE Visitor : public visitor::Base<Parameters<t_Writer> >
247  {
248  public:
249  typedef cfgwrite::Parameters<t_Writer> Parameters;
250 
251 
252  public:
253  ariles::preprocess::Visitor preprocess_visitor_;
254  t_Writer writer_visitor_;
255 
256 
257  public:
258  template <class t_Initializer>
259  Visitor(t_Initializer &initializer) : writer_visitor_(initializer)
260  {
262  }
263 
264  template <class t_Initializer>
265  Visitor(const t_Initializer &initializer) : writer_visitor_(initializer)
266  {
268  }
269 
270  template <class t_Initializer0, class t_Initializer1>
271  Visitor(t_Initializer0 *initializer0, const t_Initializer1 &initializer1)
272  : writer_visitor_(initializer0, initializer1)
273  {
275  }
276 
277  template <class t_Initializer0, class t_Initializer1>
278  Visitor(t_Initializer0 &initializer0, const t_Initializer1 &initializer1)
279  : writer_visitor_(initializer0, initializer1)
280  {
282  }
283 
284 
286 
287  template <class t_Ariles>
288  const Parameters getParameters(const t_Ariles &ariles_class) const
289  {
290  // static variable is potentially unsafe
291  return (Parameters(
292  ariles_class.arilesGetParameters(preprocess_visitor_),
293  ariles_class.arilesGetParameters(writer_visitor_)));
294  }
295 
296 
297  template <class t_Entry>
298  void start(t_Entry &entry, const std::string &name, const Parameters &param)
299  {
301  this->operator()(entry, name, param);
302  }
303 
304 
305  template <class t_Entry>
306  void operator()(t_Entry &entry, const std::string &name, const Parameters &param)
307  {
309  ARILES_TRACE_ENTRY(name);
310  ARILES_TRACE_TYPE(entry);
311  ariles::apply(preprocess_visitor_, entry, name, param.preprocess_parameters_);
312  ariles::apply(writer_visitor_, entry, name, param.writer_parameters_);
313  }
314 
315 
316  const t_Writer &getWriter() const
317  {
318  return (writer_visitor_);
319  }
320 
321 
322  t_Writer &getWriter()
323  {
324  return (writer_visitor_);
325  }
326  };
327 #endif
328  } // namespace cfgwrite
329 } // namespace ariles
void apply(t_Visitor &visitor, t_Ariles &ariles_class, const std::string &name, const typename t_Visitor::Parameters &param, ARILES_IS_BASE_ENABLER(ariles::visitor::Visitor, t_Visitor))
Definition: common.h:96
#define ARILES_TRACE_FUNCTION
Definition: trace.h:118
Visitor(t_Initializer &initializer)
Definition: config.h:34
const t_Writer & getWriter() const
Definition: config.h:203
#define ARILES_TRACE_TYPE(entry)
Definition: trace.h:120
Visitor(const t_Initializer &initializer)
Definition: config.h:184
Visitor(t_Initializer0 &initializer0, const t_Initializer1 &initializer1)
Definition: config.h:197
Visitor(const t_Initializer &initializer)
Definition: config.h:40
const t_Parameters & getDefaultParameters() const
Definition: common.h:33
Visitor(t_Initializer0 *initializer0, const t_Initializer1 &initializer1)
Definition: config.h:190
Visitor(t_Initializer0 &initializer0, const t_Initializer1 &initializer1)
Definition: config.h:46
#define ARILES_VISIBILITY_ATTRIBUTE
Definition: helpers.h:69
#define ARILES_TRACE_ENTRY(entry_name)
Definition: trace.h:119
Definition: basic.h:17
Visitor(t_Initializer &initializer)
Definition: config.h:178