15 #include "../internal/helpers.h"
16 #include "../visitors/serialization.h"
22 template <
class... t_Args>
25 return (entry.empty());
34 template <
class t_Visitor,
class... t_Args>
38 const std::size_t size = visitor.startArray();
40 for (std::size_t i = 0; i < size; ++i)
42 std::pair<
typename std::map<t_Args...>::key_type,
typename std::map<t_Args...>::mapped_type> map_entry;
44 visitor.startArrayElement();
46 entry.insert(map_entry);
47 visitor.endArrayElement();
53 template <
class t_Visitor,
class... t_Args>
56 std::map<std::string, t_Args...> &entry,
60 if (parameters.sloppy_maps_ and visitor.startIteratedMap(t_Visitor::SIZE_LIMIT_MIN, 1))
63 std::string entry_name;
64 while (visitor.startIteratedMapElement(entry_name))
66 apply_read(visitor, entry[entry_name], parameters);
67 visitor.endIteratedMapElement();
69 visitor.endIteratedMap();
73 apply_read<t_Visitor, std::string, t_Args...>(visitor, entry, parameters);
84 template <
class t_Visitor,
class... t_Args>
87 const std::map<t_Args...> &entry,
91 writer.startArray(entry.size(), param.compact_arrays_);
92 for (
const typename std::map<t_Args...>::value_type &value : entry)
94 writer.visitArrayElement(value, param);
100 template <
class t_Visitor,
class... t_Args>
103 const std::map<std::string, t_Args...> &entry,
107 if (param.sloppy_maps_)
109 if (writer.startIteratedMap(entry.size(), param))
111 for (
const typename std::map<std::string, t_Args...>::value_type &value : entry)
113 writer.startIteratedMapElement(value.first);
115 writer.endIteratedMapElement();
117 writer.endIteratedMap();
121 apply_write<t_Visitor, std::string, t_Args...>(writer, entry, param);
131 template <
class t_Visitor,
class... t_Args>
134 const std::map<t_Args...> &left,
135 const std::map<t_Args...> &right,
140 visitor.equal_ &= (left.size() == right.size());
142 typename std::map<t_Args...>::const_iterator left_it = left.begin();
143 typename std::map<t_Args...>::const_iterator right_it = right.begin();
145 for (; (left_it != left.end()) and (right_it != right.end()) and (visitor.equal_); ++left_it, ++right_it)
147 apply_compare(visitor, left_it->first, right_it->first, param);
148 apply_compare(visitor, left_it->second, right_it->second, param);
160 template <
class t_Visitor,
class... t_Args>
163 std::map<t_Args...> &entry,
177 template <
class t_Visitor,
class... t_Args>
179 const t_Visitor &visitor,
180 std::map<t_Args...> &entry,
184 for (
typename std::map<t_Args...>::value_type &value : entry)
198 template <
class t_Visitor,
class... t_ArgsLeft,
class... t_ArgsRight>
201 std::map<t_ArgsLeft...> &left,
202 const std::map<t_ArgsRight...> &right,
207 typename std::map<t_ArgsRight...>::const_iterator right_it = right.begin();
211 for (; right_it != right.end(); ++right_it)
213 typename std::map<t_ArgsLeft...>::key_type left_key;
216 apply_copyfrom(visitor, left[std::move(left_key)], right_it->second, param);
224 template <
class t_Visitor,
class... t_ArgsLeft,
class... t_ArgsRight>
227 const std::map<t_ArgsLeft...> &left,
228 std::map<t_ArgsRight...> &right,
233 typename std::map<t_ArgsLeft...>::const_iterator left_it = left.begin();
237 for (; left_it != left.end(); ++left_it)
239 typename std::map<t_ArgsRight...>::key_type right_key;
241 apply_copyto(visitor, left_it->first, right_key, param);
242 apply_copyto(visitor, left_it->second, right[std::move(right_key)], param);
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)
visitor::Parameters Parameters
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