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