@@ -239,16 +239,7 @@ namespace msgpackcpp
239239 class Compare = std::less<K>,
240240 class Alloc = std::allocator<std::pair<const K, V>>
241241 >
242- inline void serialize (Stream& out, const std::map<K,V,Compare,Alloc>& map)
243- {
244- serialize_map_size (out, map.size ());
245-
246- for (const auto & [k,v] : map)
247- {
248- serialize (out, k);
249- serialize (out, v);
250- }
251- }
242+ void serialize (Stream& out, const std::map<K,V,Compare,Alloc>& map);
252243
253244 template <
254245 class Source ,
@@ -257,20 +248,7 @@ namespace msgpackcpp
257248 class Compare = std::less<K>,
258249 class Alloc = std::allocator<std::pair<const K, V>>
259250 >
260- inline void deserialize (Source& in, std::map<K,V,Compare,Alloc>& map)
261- {
262- uint32_t size{};
263- deserialize_map_size (in, size);
264-
265- for (uint32_t i = 0 ; i < size ; ++i)
266- {
267- K key{};
268- V val{};
269- deserialize (in, key);
270- deserialize (in, val);
271- map.emplace (std::make_pair (key, val));
272- }
273- }
251+ void deserialize (Source& in, std::map<K,V,Compare,Alloc>& map);
274252
275253 template <
276254 class Stream ,
@@ -280,16 +258,7 @@ namespace msgpackcpp
280258 class KeyEqual = std::equal_to<K>,
281259 class Alloc = std::allocator<std::pair<const K, V>>
282260 >
283- inline void serialize (Stream& out, const std::unordered_map<K,V,Hash,KeyEqual,Alloc>& map)
284- {
285- serialize_map_size (out, map.size ());
286-
287- for (const auto & [k,v] : map)
288- {
289- serialize (out, k);
290- serialize (out, v);
291- }
292- }
261+ void serialize (Stream& out, const std::unordered_map<K,V,Hash,KeyEqual,Alloc>& map);
293262
294263 template <
295264 class Source ,
@@ -299,46 +268,15 @@ namespace msgpackcpp
299268 class KeyEqual = std::equal_to<K>,
300269 class Alloc = std::allocator<std::pair<const K, V>>
301270 >
302- inline void deserialize (Source& in, std::unordered_map<K,V,Hash,KeyEqual,Alloc>& map)
303- {
304- uint32_t size{};
305- deserialize_map_size (in, size);
306-
307- for (uint32_t i = 0 ; i < size ; ++i)
308- {
309- K key{};
310- V val{};
311- deserialize (in, key);
312- deserialize (in, val);
313- map.emplace (std::make_pair (key, val));
314- }
315- }
271+ void deserialize (Source& in, std::unordered_map<K,V,Hash,KeyEqual,Alloc>& map);
316272
317- // ///////////////////////////////////////////////////////////////////////////////
318- // / Tuple
319- // ///////////////////////////////////////////////////////////////////////////////
273+ // ----------------------------------------------------------------------------------------------------------------
320274
321275 template <class Stream , class ... Args>
322- inline void serialize (Stream& out, const std::tuple<Args...>& tpl)
323- {
324- serialize_array_size (out, sizeof ...(Args));
325- std::apply ([&](auto &&... args) {
326- (serialize (out, std::forward<decltype (args)>(args)),...);
327- }, tpl);
328- }
329-
276+ void serialize (Stream& out, const std::tuple<Args...>& tpl);
277+
330278 template <class Source , class ... Args>
331- inline void deserialize (Source& in, std::tuple<Args...>& tpl)
332- {
333- uint32_t size{};
334- deserialize_array_size (in, size);
335- if (size != sizeof ...(Args))
336- throw std::system_error (BAD_SIZE);
337-
338- std::apply ([&](auto &&... args) {
339- (deserialize (in, std::forward<decltype (args)>(args)),...);
340- }, tpl);
341- }
279+ void deserialize (Source& in, std::tuple<Args...>& tpl);
342280
343281// ----------------------------------------------------------------------------------------------------------------
344282// ----------------------------------------------------------------------------------------------------------------
@@ -957,6 +895,112 @@ namespace msgpackcpp
957895 throw std::system_error (BAD_FORMAT);
958896 }
959897
898+ template <
899+ class Stream ,
900+ class K ,
901+ class V ,
902+ class Compare ,
903+ class Alloc
904+ >
905+ inline void serialize (Stream& out, const std::map<K,V,Compare,Alloc>& map)
906+ {
907+ serialize_map_size (out, map.size ());
908+
909+ for (const auto & [k,v] : map)
910+ {
911+ serialize (out, k);
912+ serialize (out, v);
913+ }
914+ }
915+
916+ template <
917+ class Source ,
918+ class K ,
919+ class V ,
920+ class Compare ,
921+ class Alloc
922+ >
923+ inline void deserialize (Source& in, std::map<K,V,Compare,Alloc>& map)
924+ {
925+ uint32_t size{};
926+ deserialize_map_size (in, size);
927+
928+ for (uint32_t i = 0 ; i < size ; ++i)
929+ {
930+ K key{};
931+ V val{};
932+ deserialize (in, key);
933+ deserialize (in, val);
934+ map.emplace (std::make_pair (key, val));
935+ }
936+ }
937+
938+ template <
939+ class Stream ,
940+ class K ,
941+ class V ,
942+ class Hash ,
943+ class KeyEqual ,
944+ class Alloc
945+ >
946+ inline void serialize (Stream& out, const std::unordered_map<K,V,Hash,KeyEqual,Alloc>& map)
947+ {
948+ serialize_map_size (out, map.size ());
949+
950+ for (const auto & [k,v] : map)
951+ {
952+ serialize (out, k);
953+ serialize (out, v);
954+ }
955+ }
956+
957+ template <
958+ class Source ,
959+ class K ,
960+ class V ,
961+ class Hash ,
962+ class KeyEqual ,
963+ class Alloc
964+ >
965+ inline void deserialize (Source& in, std::unordered_map<K,V,Hash,KeyEqual,Alloc>& map)
966+ {
967+ uint32_t size{};
968+ deserialize_map_size (in, size);
969+
970+ for (uint32_t i = 0 ; i < size ; ++i)
971+ {
972+ K key{};
973+ V val{};
974+ deserialize (in, key);
975+ deserialize (in, val);
976+ map.emplace (std::make_pair (key, val));
977+ }
978+ }
979+
980+ // ----------------------------------------------------------------------------------------------------------------
981+
982+ template <class Stream , class ... Args>
983+ inline void serialize (Stream& out, const std::tuple<Args...>& tpl)
984+ {
985+ serialize_array_size (out, sizeof ...(Args));
986+ std::apply ([&](auto &&... args) {
987+ (serialize (out, std::forward<decltype (args)>(args)),...);
988+ }, tpl);
989+ }
990+
991+ template <class Source , class ... Args>
992+ inline void deserialize (Source& in, std::tuple<Args...>& tpl)
993+ {
994+ uint32_t size{};
995+ deserialize_array_size (in, size);
996+ if (size != sizeof ...(Args))
997+ throw std::system_error (BAD_SIZE);
998+
999+ std::apply ([&](auto &&... args) {
1000+ (deserialize (in, std::forward<decltype (args)>(args)),...);
1001+ }, tpl);
1002+ }
1003+
9601004// ----------------------------------------------------------------------------------------------------------------
9611005
9621006}
0 commit comments