Ariles
Loading...
Searching...
No Matches
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
17namespace ariles2
18{
19 template <class... t_Args>
20 bool isMissing(const std::vector<t_Args...> &entry)
21 {
22 return (entry.empty());
23 }
24} // namespace ariles2
25
26
27namespace ariles2
28{
29 namespace read
30 {
31 template <class t_Visitor, class... t_Args>
32 void apply_read(t_Visitor &visitor, std::vector<t_Args...> &entry, const typename t_Visitor::Parameters &param)
33 {
35 entry.resize(visitor.startArray());
36 for (typename std::vector<t_Args...>::value_type &value : entry)
37 {
38 visitor.visitArrayElement(value, param);
39 }
40 visitor.endArray();
41 }
42
43 template <class t_Visitor, class... t_Args>
45 t_Visitor &visitor,
46 std::vector<bool, t_Args...> &entry,
47 const typename t_Visitor::Parameters &param)
48 {
50 entry.resize(visitor.startArray());
51 for (std::size_t i = 0; i < entry.size(); ++i)
52 {
53 bool value;
54 visitor.visitArrayElement(value, param);
55 entry[i] = value;
56 }
57 visitor.endArray();
58 }
59 } // namespace read
60} // namespace ariles2
61
62
63namespace ariles2
64{
65 namespace write
66 {
67 template <class t_Visitor, class... t_Args>
69 t_Visitor &writer,
70 const std::vector<t_Args...> &entry,
71 const typename t_Visitor::Parameters &param)
72 {
74 writer.startArray(entry.size(), param.compact_arrays_);
75 for (const typename std::vector<t_Args...>::value_type &value : entry)
76 {
77 writer.visitArrayElement(value, param);
78 }
79 writer.endArray();
80 }
81 } // namespace write
82} // namespace ariles2
83
84
85namespace ariles2
86{
87 namespace compare
88 {
89 template <class t_Visitor, class... t_Args>
91 t_Visitor &visitor,
92 const std::vector<t_Args...> &left,
93 const std::vector<t_Args...> &right,
94 const typename t_Visitor::Parameters &param)
95 {
97
98 visitor.equal_ &= (left.size() == right.size());
99
100 for (std::size_t i = 0; i < left.size() and visitor.equal_; ++i)
101 {
102 apply_compare(visitor, left[i], right[i], param);
103 }
104 }
105 } // namespace compare
106} // namespace ariles2
107
108
109namespace ariles2
110{
111 namespace defaults
112 {
113 template <class t_Visitor, class... t_Args>
115 const t_Visitor & /*visitor*/,
116 std::vector<t_Args...> &entry,
117 const typename t_Visitor::Parameters & /*param*/)
118 {
120 entry.clear();
121 }
122 } // namespace defaults
123} // namespace ariles2
124
125
126
127namespace ariles2
128{
129 namespace process
130 {
131 template <class t_Visitor, class... t_Args>
133 const t_Visitor &visitor,
134 std::vector<t_Args...> &entry,
135 const typename t_Visitor::Parameters &param)
136 {
138 for (typename std::vector<t_Args...>::value_type &value : entry)
139 {
140 apply_process(visitor, value, param);
141 }
142 }
143
144 template <class t_Visitor, class... t_Args>
146 const t_Visitor &visitor,
147 std::vector<bool, t_Args...> &entry,
148 const typename t_Visitor::Parameters &param)
149 {
151 for (std::size_t i = 0; i < entry.size(); ++i)
152 {
153 bool value = entry[i];
154 apply_process(visitor, value, param);
155 entry[i] = value;
156 }
157 }
158 } // namespace process
159} // namespace ariles2
160
161
162namespace ariles2
163{
164 namespace copyfrom
165 {
166 template <class t_Visitor, class... t_LeftArgs, class... t_RightArgs>
168 t_Visitor &visitor,
169 std::vector<t_LeftArgs...> &left,
170 const std::vector<t_RightArgs...> &right,
171 const typename t_Visitor::Parameters &param)
172 {
174
175 left.clear();
176 left.reserve(right.size());
177 for (const typename std::vector<t_RightArgs...>::value_type &right_value : right)
178 {
179 typename std::vector<t_LeftArgs...>::value_type left_value;
180 apply_copyfrom(visitor, left_value, right_value, param);
181 left.push_back(std::move(left_value));
182 }
183 }
184 } // namespace copyfrom
185
186
187 namespace copyto
188 {
189 template <class t_Visitor, class... t_LeftArgs, class... t_RightArgs>
191 t_Visitor &visitor,
192 const std::vector<t_LeftArgs...> &left,
193 std::vector<t_RightArgs...> &right,
194 const typename t_Visitor::Parameters &param)
195 {
197
198 right.clear();
199 right.reserve(left.size());
200 for (const typename std::vector<t_LeftArgs...>::value_type &left_value : left)
201 {
202 typename std::vector<t_RightArgs...>::value_type right_value;
203 apply_copyto(visitor, left_value, right_value, param);
204 right.push_back(std::move(right_value));
205 }
206 }
207 } // namespace copyto
208} // namespace ariles2
void apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:140
void apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:307
void apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:353
void 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:232
void apply_process(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param)
Definition basic.h:289
void 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
void 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:82
bool isMissing(const ARILES2_POINTER_TYPE< t_Entry > &entry)
#define CPPUT_TRACE_FUNCTION
Definition trace.h:126