Ariles
Loading...
Searching...
No Matches
std_set.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 <set>
14#include "../internal/helpers.h"
15
16
17namespace ariles2
18{
19 template <class... t_Args>
20 bool isMissing(const std::set<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::set<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::set<t_Args...>::value_type value;
40 visitor.visitArrayElement(value, param);
41 entry.insert(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::set<t_Args...> &entry,
57 const typename t_Visitor::Parameters &param)
58 {
60 writer.startArray(entry.size(), param.compact_arrays_);
61 for (const typename std::set<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::set<t_Args...> &left,
79 const std::set<t_Args...> &right,
80 const typename t_Visitor::Parameters &param)
81 {
83
84 visitor.equal_ &= (left.size() == right.size());
85
86 if (left.size() == right.size())
87 {
88 typename std::set<t_Args...>::const_iterator left_it = left.begin();
89 typename std::set<t_Args...>::const_iterator right_it = right.begin();
90
91 for (; left_it != left.end() && right_it != right.end(); ++left_it, ++right_it)
92 {
93 if (*left_it != *right_it)
94 {
95 visitor.equal_ = false;
96 break;
97 }
98 apply_compare(visitor, *left_it, *right_it, param);
99 }
100 }
101 }
102 } // namespace compare
103} // namespace ariles2
104
105
106namespace ariles2
107{
108 namespace defaults
109 {
110 template <class t_Visitor, class... t_Args>
112 const t_Visitor & /*visitor*/,
113 std::set<t_Args...> &entry,
114 const typename t_Visitor::Parameters & /*param*/)
115 {
117 entry.clear();
118 }
119 } // namespace defaults
120} // namespace ariles2
121
122
123
124namespace ariles2
125{
126 namespace process
127 {
128 template <class t_Visitor, class... t_Args>
130 const t_Visitor &visitor,
131 std::set<t_Args...> &entry,
132 const typename t_Visitor::Parameters &param)
133 {
135 for (typename std::set<t_Args...>::const_reference value : entry)
136 {
137 apply_process(visitor, value, param);
138 }
139 }
140 } // namespace process
141} // namespace ariles2
142
143
144namespace ariles2
145{
146 namespace copyfrom
147 {
148 template <class t_Visitor, class... t_LeftArgs, class... t_RightArgs>
150 t_Visitor &visitor,
151 std::set<t_LeftArgs...> &left,
152 const std::set<t_RightArgs...> &right,
153 const typename t_Visitor::Parameters &param)
154 {
156
157 left.clear();
158 for (const typename std::set<t_RightArgs...>::value_type &right_value : right)
159 {
160 typename std::set<t_LeftArgs...>::value_type left_value;
161 apply_copyfrom(visitor, left_value, right_value, param);
162 left.insert(std::move(left_value));
163 }
164 }
165 } // namespace copyfrom
166
167
168 namespace copyto
169 {
170 template <class t_Visitor, class... t_LeftArgs, class... t_RightArgs>
172 t_Visitor &visitor,
173 const std::set<t_LeftArgs...> &left,
174 std::set<t_RightArgs...> &right,
175 const typename t_Visitor::Parameters &param)
176 {
178
179 right.clear();
180 for (const typename std::set<t_LeftArgs...>::value_type &left_value : left)
181 {
182 typename std::set<t_RightArgs...>::value_type right_value;
183 apply_copyto(visitor, left_value, right_value, param);
184 right.insert(std::move(right_value));
185 }
186 }
187 } // namespace copyto
188} // 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