From 87c314facb469fd5d70e9240e1bc26038a27fb1e Mon Sep 17 00:00:00 2001 From: Daniel Larimer Date: Mon, 19 May 2014 15:22:19 -0400 Subject: [PATCH] raw serialization of std::map --- include/fc/io/raw.hpp | 24 ++++++++++++++++++++++++ include/fc/io/raw_fwd.hpp | 2 ++ 2 files changed, 26 insertions(+) diff --git a/include/fc/io/raw.hpp b/include/fc/io/raw.hpp index 411de23..b4ec029 100644 --- a/include/fc/io/raw.hpp +++ b/include/fc/io/raw.hpp @@ -9,6 +9,7 @@ #include #include #include +#include #define MAX_ARRAY_ALLOC_SIZE (1024*1024*10) @@ -319,6 +320,29 @@ namespace fc { value.insert( std::move(tmp) ); } } + template + inline void pack( Stream& s, const std::map& value ) { + pack( s, unsigned_int(value.size()) ); + auto itr = value.begin(); + auto end = value.end(); + while( itr != end ) { + fc::raw::pack( s, *itr ); + ++itr; + } + } + template + inline void unpack( Stream& s, std::map& value ) + { + unsigned_int size; unpack( s, size ); + value.clear(); + FC_ASSERT( size.value*(sizeof(K)+sizeof(V)) < MAX_ARRAY_ALLOC_SIZE ); + for( uint32_t i = 0; i < size.value; ++i ) + { + std::pair tmp; + fc::raw::unpack( s, tmp ); + value.insert( std::move(tmp) ); + } + } template diff --git a/include/fc/io/raw_fwd.hpp b/include/fc/io/raw_fwd.hpp index cf17bd5..922782e 100644 --- a/include/fc/io/raw_fwd.hpp +++ b/include/fc/io/raw_fwd.hpp @@ -30,6 +30,8 @@ namespace fc { template inline void pack( Stream& s, const std::unordered_map& value ); template inline void unpack( Stream& s, std::unordered_map& value ); + template inline void pack( Stream& s, const std::map& value ); + template inline void unpack( Stream& s, std::map& value ); template inline void pack( Stream& s, const std::pair& value ); template inline void unpack( Stream& s, std::pair& value );