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