Skip to content

Commit 3c77720

Browse files
Added deserialization support for maps
1 parent e41b09c commit 3c77720

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

include/msgpack.h

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,28 @@ namespace msgpackcpp
609609
}
610610
}
611611

612+
template <
613+
class Source,
614+
class K,
615+
class V,
616+
class Compare = std::less<K>,
617+
class Alloc = std::allocator<std::pair<const K, V>>
618+
>
619+
inline void deserialize(Source& in, std::map<K,V,Compare,Alloc>& map)
620+
{
621+
uint32_t size{};
622+
deserialize_map_size(in, size);
623+
624+
for (uint32_t i = 0 ; i < size ; ++i)
625+
{
626+
K key{};
627+
V val{};
628+
deserialize(in, key);
629+
deserialize(in, val);
630+
map.emplace(std::make_pair(key, val));
631+
}
632+
}
633+
612634
template <
613635
class Stream,
614636
class K,
@@ -628,6 +650,33 @@ namespace msgpackcpp
628650
}
629651
}
630652

653+
template <
654+
class Source,
655+
class K,
656+
class V,
657+
class Hash = std::hash<K>,
658+
class KeyEqual = std::equal_to<K>,
659+
class Alloc = std::allocator<std::pair<const K, V>>
660+
>
661+
inline void deserialize(Source& in, std::unordered_map<K,V,Hash,KeyEqual,Alloc>& map)
662+
{
663+
uint32_t size{};
664+
deserialize_map_size(in, size);
665+
666+
for (uint32_t i = 0 ; i < size ; ++i)
667+
{
668+
K key{};
669+
V val{};
670+
deserialize(in, key);
671+
deserialize(in, val);
672+
map.emplace(std::make_pair(key, val));
673+
}
674+
}
675+
676+
/////////////////////////////////////////////////////////////////////////////////
677+
/// Helpers
678+
/////////////////////////////////////////////////////////////////////////////////
679+
631680
template<class Stream, class... Args>
632681
inline void serialize_all(Stream& out, Args&&... args)
633682
{

0 commit comments

Comments
 (0)