Ariles
std_vector.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 #pragma once
12 
13 #include <vector>
14 
15 namespace ariles
16 {
17  namespace read
18  {
19  template <class t_Visitor, typename t_VectorEntryType, class t_Allocator>
21  t_Visitor &visitor,
22  std::vector<t_VectorEntryType, t_Allocator> &entry,
23  const typename t_Visitor::Parameters &param)
24  {
26  entry.resize(visitor.startArray());
27  for (std::size_t i = 0; i < entry.size(); ++i)
28  {
29  apply_read(visitor, entry[i], param);
30  visitor.shiftArray();
31  }
32  visitor.endArray();
33  }
34  } // namespace read
35 } // namespace ariles
36 
37 
38 namespace ariles
39 {
40  namespace write
41  {
42  template <class t_Visitor, typename t_VectorEntryType, class t_Allocator>
44  t_Visitor &writer,
45  const std::vector<t_VectorEntryType, t_Allocator> &entry,
46  const typename t_Visitor::Parameters &param)
47  {
49  writer.startArray(entry.size(), param.isSet(t_Visitor::Parameters::COMPACT_ARRAYS_IF_SUPPORTED));
50  for (std::size_t i = 0; i < entry.size(); ++i)
51  {
52  apply_write(writer, entry[i], param);
53  writer.shiftArray();
54  }
55  writer.endArray();
56  }
57  } // namespace write
58 } // namespace ariles
59 
60 
61 namespace ariles
62 {
63  namespace compare
64  {
65  template <class t_Visitor, typename t_VectorEntryType, class t_Allocator>
67  t_Visitor &visitor,
68  const std::vector<t_VectorEntryType, t_Allocator> &left,
69  const std::vector<t_VectorEntryType, t_Allocator> &right,
70  const typename t_Visitor::Parameters &param)
71  {
73 
74  visitor.equal_ &= (left.size() == right.size());
75 
76  for (std::size_t i = 0; i < left.size() and true == visitor.equal_; ++i)
77  {
78  apply_compare(visitor, left[i], right[i], param);
79  }
80  }
81  } // namespace compare
82 } // namespace ariles
83 
84 
85 namespace ariles
86 {
87  namespace defaults
88  {
89  template <class t_Visitor, typename t_VectorEntryType, class t_Allocator>
91  const t_Visitor & /*visitor*/,
92  std::vector<t_VectorEntryType, t_Allocator> &entry,
93  const typename t_Visitor::Parameters & /*param*/)
94  {
96  entry.clear();
97  }
98  } // namespace defaults
99 } // namespace ariles
100 
101 
102 
103 namespace ariles
104 {
105  namespace process
106  {
107  template <class t_Visitor, typename t_VectorEntryType, class t_Allocator>
109  const t_Visitor &visitor,
110  std::vector<t_VectorEntryType, t_Allocator> &entry,
111  const typename t_Visitor::Parameters &param)
112  {
114  for (std::size_t i = 0; i < entry.size(); ++i)
115  {
116  apply_process(visitor, entry[i], param);
117  }
118  }
119  } // namespace process
120 } // namespace ariles
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
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