Ariles
Loading...
Searching...
No Matches
std_deque.h
Go to the documentation of this file.
1/**
2 @file
3 @author Alexander Sherikov
4
5 @copyright 2026 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 <deque>
14#include "../internal/helpers.h"
15
16
17namespace ariles2
18{
19 template <class... t_Args>
20 bool isMissing(const std::deque<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::deque<t_Args...> &entry, const typename t_Visitor::Parameters &param)
33 {
35 const std::size_t size = visitor.startArray();
36 entry.clear();
37 entry.resize(size);
38 for (typename std::deque<t_Args...>::reference value : entry)
39 {
40 visitor.visitArrayElement(value, param);
41 }
42 visitor.endArray();
43 }
44 } // namespace read
45} // namespace ariles2
46
47
48namespace ariles2
49{
50 namespace write
51 {
52 template <class t_Visitor, class... t_Args>
54 t_Visitor &writer,
55 const std::deque<t_Args...> &entry,
56 const typename t_Visitor::Parameters &param)
57 {
59 writer.startArray(entry.size(), param.compact_arrays_);
60 for (const typename std::deque<t_Args...>::value_type &value : entry)
61 {
62 writer.visitArrayElement(value, param);
63 }
64 writer.endArray();
65 }
66 } // namespace write
67} // namespace ariles2
68
69
70namespace ariles2
71{
72 namespace compare
73 {
74 template <class t_Visitor, class... t_Args>
76 t_Visitor &visitor,
77 const std::deque<t_Args...> &left,
78 const std::deque<t_Args...> &right,
79 const typename t_Visitor::Parameters &param)
80 {
82
83 visitor.equal_ &= (left.size() == right.size());
84
85 typename std::deque<t_Args...>::const_iterator left_it = left.begin();
86 typename std::deque<t_Args...>::const_iterator right_it = right.begin();
87
88 for (; left_it != left.end() && right_it != right.end(); ++left_it, ++right_it)
89 {
90 apply_compare(visitor, *left_it, *right_it, param);
91 }
92 }
93 } // namespace compare
94} // namespace ariles2
95
96
97namespace ariles2
98{
99 namespace defaults
100 {
101 template <class t_Visitor, class... t_Args>
103 const t_Visitor & /*visitor*/,
104 std::deque<t_Args...> &entry,
105 const typename t_Visitor::Parameters & /*param*/)
106 {
108 entry.clear();
109 }
110 } // namespace defaults
111} // namespace ariles2
112
113
114
115namespace ariles2
116{
117 namespace process
118 {
119 template <class t_Visitor, class... t_Args>
121 const t_Visitor &visitor,
122 std::deque<t_Args...> &entry,
123 const typename t_Visitor::Parameters &param)
124 {
126 for (typename std::deque<t_Args...>::reference value : entry)
127 {
128 apply_process(visitor, value, param);
129 }
130 }
131 } // namespace process
132} // namespace ariles2
133
134
135namespace ariles2
136{
137 namespace copyfrom
138 {
139 template <class t_Visitor, class... t_LeftArgs, class... t_RightArgs>
141 t_Visitor &visitor,
142 std::deque<t_LeftArgs...> &left,
143 const std::deque<t_RightArgs...> &right,
144 const typename t_Visitor::Parameters &param)
145 {
147
148 left.clear();
149 for (const typename std::deque<t_RightArgs...>::value_type &right_value : right)
150 {
151 typename std::deque<t_LeftArgs...>::value_type left_value;
152 apply_copyfrom(visitor, left_value, right_value, param);
153 left.push_back(std::move(left_value));
154 }
155 }
156 } // namespace copyfrom
157
158
159 namespace copyto
160 {
161 template <class t_Visitor, class... t_LeftArgs, class... t_RightArgs>
163 t_Visitor &visitor,
164 const std::deque<t_LeftArgs...> &left,
165 std::deque<t_RightArgs...> &right,
166 const typename t_Visitor::Parameters &param)
167 {
169
170 right.clear();
171 for (const typename std::deque<t_LeftArgs...>::value_type &left_value : left)
172 {
173 typename std::deque<t_RightArgs...>::value_type right_value;
174 apply_copyto(visitor, left_value, right_value, param);
175 right.push_back(std::move(right_value));
176 }
177 }
178 } // namespace copyto
179} // 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