14#include "../internal/helpers.h"
19 template <
class... t_Args>
22 return (entry.empty());
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 ¶m)
35 const std::size_t size = visitor.startArray();
37 for (std::size_t i = 0; i < size; ++i)
39 typename std::set<t_Args...>::value_type value;
40 visitor.visitArrayElement(value, param);
41 entry.insert(std::move(value));
53 template <
class t_Visitor,
class... t_Args>
56 const std::set<t_Args...> &entry,
57 const typename t_Visitor::Parameters ¶m)
60 writer.startArray(entry.size(), param.compact_arrays_);
61 for (
const typename std::set<t_Args...>::value_type &value : entry)
63 writer.visitArrayElement(value, param);
75 template <
class t_Visitor,
class... t_Args>
78 const std::set<t_Args...> &left,
79 const std::set<t_Args...> &right,
80 const typename t_Visitor::Parameters ¶m)
84 visitor.equal_ &= (left.size() == right.size());
86 if (left.size() == right.size())
88 typename std::set<t_Args...>::const_iterator left_it = left.begin();
89 typename std::set<t_Args...>::const_iterator right_it = right.begin();
91 for (; left_it != left.end() && right_it != right.end(); ++left_it, ++right_it)
93 if (*left_it != *right_it)
95 visitor.equal_ =
false;
110 template <
class t_Visitor,
class... t_Args>
113 std::set<t_Args...> &entry,
114 const typename t_Visitor::Parameters & )
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 ¶m)
135 for (
typename std::set<t_Args...>::const_reference value : entry)
148 template <
class t_Visitor,
class... t_LeftArgs,
class... t_RightArgs>
151 std::set<t_LeftArgs...> &left,
152 const std::set<t_RightArgs...> &right,
153 const typename t_Visitor::Parameters ¶m)
158 for (
const typename std::set<t_RightArgs...>::value_type &right_value : right)
160 typename std::set<t_LeftArgs...>::value_type left_value;
162 left.insert(std::move(left_value));
170 template <
class t_Visitor,
class... t_LeftArgs,
class... t_RightArgs>
173 const std::set<t_LeftArgs...> &left,
174 std::set<t_RightArgs...> &right,
175 const typename t_Visitor::Parameters ¶m)
180 for (
const typename std::set<t_LeftArgs...>::value_type &left_value : left)
182 typename std::set<t_RightArgs...>::value_type right_value;
184 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