14 #include "../visitors/serialization.h" 20 template <
class t_Visitor,
typename t_Key,
typename t_Value,
class t_Compare,
class t_Allocator>
23 std::map<t_Key, t_Value, t_Compare, t_Allocator> &entry,
24 const typename t_Visitor::Parameters ¶m)
27 std::size_t size = visitor.startArray();
29 for (std::size_t i = 0; i < size; ++i)
31 std::pair<t_Key, t_Value> map_entry;
35 entry.insert(map_entry);
43 template <
class t_Visitor,
typename t_Value,
class t_Compare,
class t_Allocator>
46 std::map<std::string, t_Value, t_Compare, t_Allocator> &entry,
47 const typename t_Visitor::Parameters ¶meters)
51 && parameters.isSet(t_Visitor::Parameters::SLOPPY_MAPS_IF_SUPPORTED))
53 std::vector<std::string> entry_names;
54 ARILES_ASSERT(
true == visitor.getMapEntryNames(entry_names),
"Could not read names of map entries.");
56 visitor.template startMap<t_Visitor::SIZE_LIMIT_NONE>();
62 for (std::size_t i = 0; i < entry_names.size(); ++i)
64 if (
false == visitor(entry[entry_names[i]], entry_names[i], param))
66 entry.erase(entry_names[i]);
73 apply_read<t_Visitor, std::string, t_Value, t_Compare, t_Allocator>(visitor, entry, parameters);
84 template <
class t_Visitor,
typename t_Key,
typename t_Value,
class t_Compare,
class t_Allocator>
87 const std::map<t_Key, t_Value, t_Compare, t_Allocator> &entry,
88 const typename t_Visitor::Parameters ¶m)
91 writer.startArray(entry.size(), param.isSet(t_Visitor::Parameters::COMPACT_ARRAYS_IF_SUPPORTED));
92 for (
typename std::map<t_Key, t_Value, t_Compare, t_Allocator>::const_iterator it = entry.begin();
103 template <
class t_Visitor,
typename t_Value,
class t_Compare,
class t_Allocator>
106 const std::map<std::string, t_Value, t_Compare, t_Allocator> &entry,
107 const typename t_Visitor::Parameters ¶m)
111 && param.isSet(t_Visitor::Parameters::SLOPPY_MAPS_IF_SUPPORTED))
113 writer.startMap(entry.size());
114 for (
typename std::map<std::string, t_Value, t_Compare, t_Allocator>::const_iterator it = entry.begin();
118 writer(it->second, it->first, param);
124 apply_write<t_Visitor, std::string, t_Value, t_Compare, t_Allocator>(writer, entry, param);
135 template <
class t_Visitor,
typename t_Key,
typename t_Value,
class t_Compare,
class t_Allocator>
138 const std::map<t_Key, t_Value, t_Compare, t_Allocator> &left,
139 const std::map<t_Key, t_Value, t_Compare, t_Allocator> &right,
140 const typename t_Visitor::Parameters ¶m)
144 visitor.equal_ &= (left.size() == right.size());
146 typename std::map<t_Key, t_Value, t_Compare, t_Allocator>::const_iterator left_it = left.begin();
147 typename std::map<t_Key, t_Value, t_Compare, t_Allocator>::const_iterator right_it = right.begin();
149 for (; (left_it != left.end()) and (right_it != right.end()) and (
true == visitor.equal_);
150 ++left_it, ++right_it)
152 apply_compare(visitor, left_it->first, right_it->first, param);
153 apply_compare(visitor, left_it->second, right_it->second, param);
165 template <
class t_Visitor,
typename t_Key,
typename t_Value,
class t_Compare,
class t_Allocator>
168 std::map<t_Key, t_Value, t_Compare, t_Allocator> &entry,
169 const typename t_Visitor::Parameters & )
182 template <
class t_Visitor,
typename t_Key,
typename t_Value,
class t_Compare,
class t_Allocator>
184 const t_Visitor &visitor,
185 std::map<t_Key, t_Value, t_Compare, t_Allocator> &entry,
186 const typename t_Visitor::Parameters ¶m)
189 for (
typename std::map<t_Key, t_Value, t_Compare, t_Allocator>::iterator it = entry.begin();
void ARILES_VISIBILITY_ATTRIBUTE apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::Ariles, t_Left))
#define ARILES_TRACE_FUNCTION
void ARILES_VISIBILITY_ATTRIBUTE apply_process(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::Ariles, t_Entry))
void ARILES_VISIBILITY_ATTRIBUTE apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::defaults::Base, t_Entry))
void ARILES_VISIBILITY_ATTRIBUTE apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::write::Base, t_Entry))
#define ARILES_VISIBILITY_ATTRIBUTE
void ARILES_VISIBILITY_ATTRIBUTE apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶meters, ARILES_IS_BASE_ENABLER(ariles::read::Base, t_Entry))