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 #include "../internal/helpers.h"
15 
16 namespace ariles2
17 {
18  namespace read
19  {
20  template <class t_Visitor, typename t_VectorEntryType, class t_Allocator>
22  t_Visitor &visitor,
23  std::vector<t_VectorEntryType, t_Allocator> &entry,
24  const typename t_Visitor::Parameters &param)
25  {
26  ARILES2_TRACE_FUNCTION;
27  entry.resize(visitor.startArray());
28  for (std::size_t i = 0; i < entry.size(); ++i)
29  {
30  visitor.visitArrayElement(entry[i], param);
31  }
32  visitor.endArray();
33  }
34  } // namespace read
35 } // namespace ariles2
36 
37 
38 namespace ariles2
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  {
48  ARILES2_TRACE_FUNCTION;
49  writer.startArray(entry.size(), param.compact_arrays_);
50  for (std::size_t i = 0; i < entry.size(); ++i)
51  {
52  writer.visitArrayElement(entry[i], param);
53  }
54  writer.endArray();
55  }
56  } // namespace write
57 } // namespace ariles2
58 
59 
60 namespace ariles2
61 {
62  namespace compare
63  {
64  template <class t_Visitor, typename t_VectorEntryType, class t_Allocator>
66  t_Visitor &visitor,
67  const std::vector<t_VectorEntryType, t_Allocator> &left,
68  const std::vector<t_VectorEntryType, t_Allocator> &right,
69  const typename t_Visitor::Parameters &param)
70  {
71  ARILES2_TRACE_FUNCTION;
72 
73  visitor.equal_ &= (left.size() == right.size());
74 
75  for (std::size_t i = 0; i < left.size() and true == visitor.equal_; ++i)
76  {
77  apply_compare(visitor, left[i], right[i], param);
78  }
79  }
80  } // namespace compare
81 } // namespace ariles2
82 
83 
84 namespace ariles2
85 {
86  namespace defaults
87  {
88  template <class t_Visitor, typename t_VectorEntryType, class t_Allocator>
90  const t_Visitor & /*visitor*/,
91  std::vector<t_VectorEntryType, t_Allocator> &entry,
92  const typename t_Visitor::Parameters & /*param*/)
93  {
94  ARILES2_TRACE_FUNCTION;
95  entry.clear();
96  }
97  } // namespace defaults
98 } // namespace ariles2
99 
100 
101 
102 namespace ariles2
103 {
104  namespace process
105  {
106  template <class t_Visitor, typename t_VectorEntryType, class t_Allocator>
108  const t_Visitor &visitor,
109  std::vector<t_VectorEntryType, t_Allocator> &entry,
110  const typename t_Visitor::Parameters &param)
111  {
112  ARILES2_TRACE_FUNCTION;
113  for (std::size_t i = 0; i < entry.size(); ++i)
114  {
115  apply_process(visitor, entry[i], param);
116  }
117  }
118  } // namespace process
119 } // namespace ariles2
120 
121 
122 namespace ariles2
123 {
124  namespace copyfrom
125  {
126  template <
127  class t_Visitor,
128  typename t_VectorEntryTypeLeft,
129  class t_AllocatorLeft,
130  typename t_VectorEntryTypeRight,
131  class t_AllocatorRight>
133  t_Visitor &visitor,
134  std::vector<t_VectorEntryTypeLeft, t_AllocatorLeft> &left,
135  const std::vector<t_VectorEntryTypeRight, t_AllocatorRight> &right,
136  const typename t_Visitor::Parameters &param)
137  {
138  ARILES2_TRACE_FUNCTION;
139 
140  left.clear();
141  left.reserve(right.size());
142  for (std::size_t i = 0; i < right.size(); ++i)
143  {
144  t_VectorEntryTypeLeft value;
145  apply_copyfrom(visitor, value, right[i], param);
146  left.push_back(value);
147  }
148  }
149  } // namespace copyfrom
150 
151 
152  namespace copyto
153  {
154  template <
155  class t_Visitor,
156  typename t_VectorEntryTypeLeft,
157  class t_AllocatorLeft,
158  typename t_VectorEntryTypeRight,
159  class t_AllocatorRight>
161  t_Visitor &visitor,
162  const std::vector<t_VectorEntryTypeLeft, t_AllocatorLeft> &left,
163  std::vector<t_VectorEntryTypeRight, t_AllocatorRight> &right,
164  const typename t_Visitor::Parameters &param)
165  {
166  ARILES2_TRACE_FUNCTION;
167 
168  right.clear();
169  right.reserve(left.size());
170  for (std::size_t i = 0; i < left.size(); ++i)
171  {
172  t_VectorEntryTypeRight value;
173  apply_copyto(visitor, left[i], value, param);
174  right.push_back(value);
175  }
176  }
177  } // namespace copyto
178 } // namespace ariles2
ariles2::copyfrom::apply_copyfrom
void ARILES2_VISIBILITY_ATTRIBUTE apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::Ariles, t_Left))
Definition: basic.h:323
ariles2
Definition: basic.h:16
ariles2::write::apply_write
void ARILES2_VISIBILITY_ATTRIBUTE apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters &parameters, ARILES2_IS_BASE_ENABLER(ariles2::write::Base, t_Entry))
Definition: basic.h:85
ariles2::process::apply_process
void ARILES2_VISIBILITY_ATTRIBUTE apply_process(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::Ariles, t_Entry))
Definition: basic.h:293
t_Visitor
ariles2::compare::apply_compare
void ARILES2_VISIBILITY_ATTRIBUTE apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::Ariles, t_Left))
Definition: basic.h:146
ARILES2_VISIBILITY_ATTRIBUTE
#define ARILES2_VISIBILITY_ATTRIBUTE
Definition: helpers.h:138
ariles2::read::apply_read
void ARILES2_VISIBILITY_ATTRIBUTE apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &parameters, ARILES2_IS_BASE_ENABLER(ariles2::read::Base, t_Entry))
Definition: basic.h:21
ariles2::copyto::apply_copyto
void ARILES2_VISIBILITY_ATTRIBUTE apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::Ariles, t_Left))
Definition: basic.h:369
ariles2::defaults::apply_defaults
void ARILES2_VISIBILITY_ATTRIBUTE apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::defaults::Base, t_Entry))
Definition: basic.h:237