Ariles
write.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 */
10 
11 #pragma once
12 
13 #include "serialization.h"
14 
15 namespace ariles
16 {
17  namespace write
18  {
20  {
21  protected:
22  Visitor(){};
23  ~Visitor(){};
24 
25 
26  public:
27  /**
28  * @brief open configuration file
29  *
30  * @param[out] config_ofs
31  * @param[in] file_name
32  */
33  static void openFile(std::ofstream &config_ofs, const std::string &file_name)
34  {
35  config_ofs.open(file_name.c_str());
36 
37  ARILES_PERSISTENT_ASSERT(
38  true == config_ofs.good(),
39  std::string("Could not open configuration file for writing: ") + file_name.c_str());
40  }
41 
42 
43  /**
44  * @brief Flush the configuration to the output
45  */
46  virtual void flush() = 0;
47 
48 
49  /**
50  * @brief Starts a nested map in the configuration file
51  *
52  * @param[in] map_name name of the map
53  */
54  virtual void descend(const std::string &map_name)
55  {
56  ARILES_UNUSED_ARG(map_name)
57  }
58  virtual void ascend()
59  {
60  }
61 
62 
63  /**
64  * @brief Starts a nested map in the configuration file
65  *
66  * @param[in] num_entries number of child entries
67  */
68  virtual void startMap(const std::size_t num_entries)
69  {
70  ARILES_UNUSED_ARG(num_entries)
71  }
72 
73  /**
74  * @brief Ends a nested map in the configuration file
75  */
76  virtual void endMap()
77  {
78  }
79 
80 
81  virtual void startArray(const std::size_t size, const bool compact = false) = 0;
82  virtual void shiftArray()
83  {
84  }
85  virtual void endArray()
86  {
87  }
88 
89  virtual void startMatrix(const bool compact = false)
90  {
91  ARILES_UNUSED_ARG(compact)
92  }
93  virtual void startMatrixRow()
94  {
95  }
96  virtual void endMatrixRow()
97  {
98  }
99  virtual void endMatrix()
100  {
101  }
102 
103 
104  virtual void startRoot(const std::string &name)
105  {
107  if (false == name.empty())
108  {
109  descend(name);
110  }
111  }
112  virtual void endRoot(const std::string &name)
113  {
115  if (false == name.empty())
116  {
117  ascend();
118  }
119  }
120 
121 
122 #define ARILES_BASIC_TYPE(type) virtual void writeElement(const type &entry) = 0;
123 
125 
126 #undef ARILES_BASIC_TYPE
127 
128 
129  template <typename t_Entry>
130  void start(const t_Entry &entry, const std::string &entry_name, const Parameters &param)
131  {
133  this->startRoot(entry_name);
134  apply_write(*this, entry, param);
135  this->endRoot(entry_name);
136  flush();
137  }
138 
139 
140  template <typename t_Entry>
141  void operator()(const t_Entry &entry, const std::string &entry_name, const Parameters &param)
142  {
144  ARILES_TRACE_ENTRY(entry_name);
145  ARILES_TRACE_TYPE(entry);
146 
147  this->descend(entry_name);
148  apply_write(*this, entry, param);
149  this->ascend();
150  }
151  };
152 
153 
154 
155  class ARILES_VISIBILITY_ATTRIBUTE Base : public entry::ConstBase<write::Visitor>
156  {
157  };
158 
159 #ifndef ARILES_METHODS_write
160 # define ARILES_METHODS_write ARILES_METHODS(write, ARILES_EMPTY_MACRO, const)
161 #endif
162  } // namespace write
163 
164 
166 } // namespace ariles
#define ARILES_TRACE_FUNCTION
Definition: trace.h:118
virtual void ascend()
Definition: write.h:58
write::Visitor Write
Definition: write.h:165
virtual void startMap(const std::size_t num_entries)
Starts a nested map in the configuration file.
Definition: write.h:68
virtual void shiftArray()
Definition: write.h:82
virtual void descend(const std::string &map_name)
Starts a nested map in the configuration file.
Definition: write.h:54
virtual void startMatrixRow()
Definition: write.h:93
virtual void endArray()
Definition: write.h:85
#define ARILES_BASIC_TYPES_LIST
Definition: helpers.h:105
#define ARILES_TRACE_TYPE(entry)
Definition: trace.h:120
virtual void endRoot(const std::string &name)
Definition: write.h:112
virtual void startRoot(const std::string &name)
Definition: write.h:104
static void openFile(std::ofstream &config_ofs, const std::string &file_name)
open configuration file
Definition: write.h:33
virtual void endMatrix()
Definition: write.h:99
virtual void endMap()
Ends a nested map in the configuration file.
Definition: write.h:76
ARILES_BASIC_TYPES_LIST void start(const t_Entry &entry, const std::string &entry_name, const Parameters &param)
Definition: write.h:130
virtual void endMatrixRow()
Definition: write.h:96
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
void operator()(const t_Entry &entry, const std::string &entry_name, const Parameters &param)
Definition: write.h:141
virtual void startMatrix(const bool compact=false)
Definition: write.h:89
#define ARILES_VISIBILITY_ATTRIBUTE
Definition: helpers.h:69
#define ARILES_TRACE_ENTRY(entry_name)
Definition: trace.h:119
Definition: basic.h:17