13#include <unordered_set>
14#include "../internal/helpers.h"
19 template <
class... t_Args>
20 bool isMissing(
const std::unordered_set<t_Args...> &entry)
22 return (entry.empty());
31 template <
class t_Visitor,
class... t_Args>
34 std::unordered_set<t_Args...> &entry,
35 const typename t_Visitor::Parameters ¶m)
38 const std::size_t size = visitor.startArray();
40 for (std::size_t i = 0; i < size; ++i)
42 typename std::unordered_set<t_Args...>::value_type value;
43 visitor.visitArrayElement(value, param);
44 entry.insert(std::move(value));
56 template <
class t_Visitor,
class... t_Args>
59 const std::unordered_set<t_Args...> &entry,
60 const typename t_Visitor::Parameters ¶m)
63 writer.startArray(entry.size(), param.compact_arrays_);
64 for (
const typename std::unordered_set<t_Args...>::value_type &value : entry)
66 writer.visitArrayElement(value, param);
78 template <
class t_Visitor,
class... t_Args>
81 const std::unordered_set<t_Args...> &left,
82 const std::unordered_set<t_Args...> &right,
83 const typename t_Visitor::Parameters ¶m)
87 visitor.equal_ &= (left.size() == right.size());
89 if (visitor.equal_ && !left.empty())
91 for (
const typename std::unordered_set<t_Args...>::value_type &left_value : left)
93 typename std::unordered_set<t_Args...>::const_iterator right_it = right.find(left_value);
94 if (right_it == right.end())
96 visitor.equal_ =
false;
111 template <
class t_Visitor,
class... t_Args>
114 std::unordered_set<t_Args...> &entry,
115 const typename t_Visitor::Parameters & )
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 ¶m)
136 for (
typename std::unordered_set<t_Args...>::const_reference value : entry)
149 template <
class t_Visitor,
class... t_LeftArgs,
class... t_RightArgs>
152 std::unordered_set<t_LeftArgs...> &left,
153 const std::unordered_set<t_RightArgs...> &right,
154 const typename t_Visitor::Parameters ¶m)
159 for (
const typename std::unordered_set<t_RightArgs...>::value_type &right_value : right)
161 typename std::unordered_set<t_LeftArgs...>::value_type left_value;
163 left.insert(std::move(left_value));
171 template <
class t_Visitor,
class... t_LeftArgs,
class... t_RightArgs>
174 const std::unordered_set<t_LeftArgs...> &left,
175 std::unordered_set<t_RightArgs...> &right,
176 const typename t_Visitor::Parameters ¶m)
181 for (
const typename std::unordered_set<t_LeftArgs...>::value_type &left_value : left)
183 typename std::unordered_set<t_RightArgs...>::value_type right_value;
185 right.insert(std::move(right_value));
void apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters ¶m)
void apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters ¶m)
void apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters ¶m)
void apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶m, ARILES2_IS_BASE_ENABLER(ariles2::defaults::Base, t_Entry))
void apply_process(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶m)
void apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶meters, ARILES2_IS_BASE_ENABLER(ariles2::read::Base, t_Entry))
void apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters ¶meters, ARILES2_IS_BASE_ENABLER(ariles2::write::Base, t_Entry))
bool isMissing(const ARILES2_POINTER_TYPE< t_Entry > &entry)
#define CPPUT_TRACE_FUNCTION