Ariles
serialization.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 "common.h"
14 
15 /**
16 @defgroup serialization Serialization
17 
18 @brief Serialization.
19 */
20 
21 namespace ariles2
22 {
23  /// @ingroup serialization
24  namespace serialization
25  {
27  {
28  public:
34 
35 
36  public:
37  Parameters(const bool override_parameters = true) : visitor::Parameters(override_parameters)
38  {
39  sloppy_maps_ = false;
40  sloppy_pairs_ = false;
41  explicit_matrix_size_ = false;
42  fallback_to_string_floats_ = true;
43  flat_matrices_ = true;
44  }
45  };
46 
47 
48  template <class t_RawNode>
50  {
51  public:
52  enum Type
53  {
54  UNDEFINED = 0,
55  GENERIC = 1,
56  ARRAY = 2,
57  MATRIX = 3,
58  VECTOR = 4,
59  ITERATED_MAP = 5
60  };
61 
62 
63  public:
64  t_RawNode node_;
65  std::size_t index_;
66  std::size_t size_;
67  Type type_;
68 
69 
70  public:
71  Node(const Type type = GENERIC)
72  {
73  ARILES2_TRACE_FUNCTION
74  type_ = type;
75  }
76 
77  Node(t_RawNode node, const Type type = GENERIC) : node_(node)
78  {
79  ARILES2_TRACE_FUNCTION
80  type_ = type;
81  index_ = 0;
82  size_ = 0;
83  }
84 
85  Node(const std::size_t index, const std::size_t size) : index_(index), size_(size)
86  {
87  ARILES2_TRACE_FUNCTION
88  type_ = ARRAY; // NOLINT
89  } // NOLINT
90 
91  Node(t_RawNode node, const std::size_t index, const std::size_t size)
92  : node_(node), index_(index), size_(size)
93  {
94  ARILES2_TRACE_FUNCTION
95  type_ = ARRAY;
96  }
97 
98  bool isMatrix() const
99  {
100  return (MATRIX == type_);
101  }
102 
103  bool isVector() const
104  {
105  return (VECTOR == type_);
106  }
107 
108  bool isArray() const
109  {
110  return (ARRAY == type_);
111  }
112 
113  bool isAllParsed() const
114  {
115  return (index_ == size_);
116  }
117  };
118 
119 
120  template <class t_Visitor, class t_Implementation>
122  {
123  protected:
124  typedef t_Implementation Impl;
125  typedef ARILES2_SHARED_PTR<t_Implementation> ImplPtr;
126 
127  protected:
129 
130  private:
131  PIMPLVisitor(const PIMPLVisitor &);
132  PIMPLVisitor &operator=(const PIMPLVisitor &);
133 
134  protected:
137  };
138 
139 
140  template <class t_Derived, class t_Parameters>
141  class ARILES2_VISIBILITY_ATTRIBUTE Base : public visitor::Base<visitor::GenericVisitor, t_Parameters>
142  {
143  public:
145 
146 
147  public:
149 
150  template <class t_Ariles>
151  const t_Parameters &getParameters(const t_Ariles &ariles_class) const
152  {
153  return (ariles_class.arilesGetParameters(*static_cast<const t_Derived *>(this)));
154  }
155  };
156  } // namespace serialization
157 } // namespace ariles2
ariles2::serialization::Base
Definition: serialization.h:141
ariles2
Definition: basic.h:16
ariles2::visitor::Base
Definition: common.h:50
ariles2::serialization::Node::isVector
bool isVector() const
Definition: serialization.h:103
ariles2::serialization::Parameters
Definition: serialization.h:26
t_Parameters
ariles2::serialization::PIMPLVisitor::PIMPLVisitor
PIMPLVisitor()
Definition: serialization.h:135
ariles2::serialization::Parameters::explicit_matrix_size_
bool explicit_matrix_size_
Definition: serialization.h:31
ariles2::serialization::Node::size_
std::size_t size_
Definition: serialization.h:66
ariles2::serialization::PIMPLVisitor
Definition: serialization.h:121
ariles2::serialization::Parameters::Parameters
Parameters(const bool override_parameters=true)
Definition: serialization.h:37
ARILES2_SHARED_PTR< impl::Reader >
ariles2::serialization::Parameters::sloppy_pairs_
bool sloppy_pairs_
Definition: serialization.h:30
ariles2::serialization::Base::Parameters
t_Parameters Parameters
Definition: serialization.h:144
common.h
ariles2::serialization::Parameters::flat_matrices_
bool flat_matrices_
Definition: serialization.h:33
t_Visitor
ariles2::serialization::Node::Node
Node(t_RawNode node, const std::size_t index, const std::size_t size)
Definition: serialization.h:91
ariles2::serialization::Node::isArray
bool isArray() const
Definition: serialization.h:108
ariles2::serialization::PIMPLVisitor::Impl
t_Implementation Impl
Definition: serialization.h:124
ariles2::serialization::PIMPLVisitor::~PIMPLVisitor
~PIMPLVisitor()
Definition: serialization.h:136
ARILES2_VISIBILITY_ATTRIBUTE
#define ARILES2_VISIBILITY_ATTRIBUTE
Definition: helpers.h:138
ariles2::serialization::Node::isAllParsed
bool isAllParsed() const
Definition: serialization.h:113
ariles2::visitor::Parameters
Definition: common.h:20
ariles2::serialization::PIMPLVisitor::impl_
ImplPtr impl_
Definition: serialization.h:128
ariles2::serialization::Parameters::sloppy_maps_
bool sloppy_maps_
Definition: serialization.h:29
ariles2::serialization::Node::node_
t_RawNode node_
Definition: serialization.h:64
ariles2::serialization::Node::Node
Node(const Type type=GENERIC)
Definition: serialization.h:71
ariles2::serialization::Parameters::fallback_to_string_floats_
bool fallback_to_string_floats_
Definition: serialization.h:32
ariles2::serialization::Node::Node
Node(const std::size_t index, const std::size_t size)
Definition: serialization.h:85
ariles2::serialization::Node::Node
Node(t_RawNode node, const Type type=GENERIC)
Definition: serialization.h:77
ariles2::serialization::Node::isMatrix
bool isMatrix() const
Definition: serialization.h:98
ariles2::serialization::Node::type_
Type type_
Definition: serialization.h:67
ariles2::serialization::Node
Definition: serialization.h:49
ariles2::serialization::Base::getParameters
const t_Parameters & getParameters(const t_Ariles &ariles_class) const
Definition: serialization.h:151
ariles2::serialization::PIMPLVisitor::ImplPtr
ARILES2_SHARED_PTR< t_Implementation > ImplPtr
Definition: serialization.h:125
ariles2::serialization::Node::index_
std::size_t index_
Definition: serialization.h:65