adding raw serialization for unordered_map
This commit is contained in:
parent
2743b56b56
commit
0843aa6652
4 changed files with 49 additions and 1 deletions
|
|
@ -98,6 +98,7 @@ set( fc_sources
|
|||
src/io/sstream.cpp
|
||||
src/io/json.cpp
|
||||
src/io/varint.cpp
|
||||
src/io/console.cpp
|
||||
src/filesystem.cpp
|
||||
src/interprocess/process.cpp
|
||||
src/interprocess/signals.cpp
|
||||
|
|
|
|||
|
|
@ -254,6 +254,45 @@ namespace fc {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
template<typename Stream, typename K, typename V>
|
||||
inline void pack( Stream& s, const std::pair<K,V>& value ) {
|
||||
pack( s, value.first );
|
||||
pack( s, value.second );
|
||||
}
|
||||
template<typename Stream, typename K, typename V>
|
||||
inline void unpack( Stream& s, std::pair<K,V>& value )
|
||||
{
|
||||
unpack( s, value.first );
|
||||
unpack( s, value.second );
|
||||
}
|
||||
|
||||
template<typename Stream, typename K, typename V>
|
||||
inline void pack( Stream& s, const std::unordered_map<K,V>& 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<typename Stream, typename K, typename V>
|
||||
inline void unpack( Stream& s, std::unordered_map<K,V>& value )
|
||||
{
|
||||
unsigned_int size; unpack( s, size );
|
||||
value.clear();
|
||||
FC_ASSERT( size.value*(sizeof(K)+sizeof(V)) < MAX_ARRAY_ALLOC_SIZE );
|
||||
value.reserve(size.value);
|
||||
for( uint32_t i = 0; i < size.value; ++i )
|
||||
{
|
||||
std::pair<K,V> tmp;
|
||||
fc::raw::unpack( s, tmp );
|
||||
value.insert( std::move(tmp) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<typename Stream, typename T>
|
||||
inline void pack( Stream& s, const std::vector<T>& value ) {
|
||||
pack( s, unsigned_int(value.size()) );
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <vector>
|
||||
#include <string>
|
||||
#include <unordered_set>
|
||||
#include <unordered_map>
|
||||
#include <set>
|
||||
|
||||
namespace fc {
|
||||
|
|
@ -26,6 +27,13 @@ namespace fc {
|
|||
template<typename Stream, typename T> inline void unpack( Stream& s, std::set<T>& value );
|
||||
template<typename Stream, typename T> inline void pack( Stream& s, const std::unordered_set<T>& value );
|
||||
template<typename Stream, typename T> inline void unpack( Stream& s, std::unordered_set<T>& value );
|
||||
|
||||
template<typename Stream, typename K, typename V> inline void pack( Stream& s, const std::unordered_map<K,V>& value );
|
||||
template<typename Stream, typename K, typename V> inline void unpack( Stream& s, std::unordered_map<K,V>& value );
|
||||
|
||||
template<typename Stream, typename K, typename V> inline void pack( Stream& s, const std::pair<K,V>& value );
|
||||
template<typename Stream, typename K, typename V> inline void unpack( Stream& s, std::pair<K,V>& value );
|
||||
|
||||
template<typename Stream> inline void pack( Stream& s, const variant_object& v );
|
||||
template<typename Stream> inline void unpack( Stream& s, variant_object& v );
|
||||
template<typename Stream> inline void pack( Stream& s, const variant& v );
|
||||
|
|
|
|||
|
|
@ -354,4 +354,4 @@ namespace fc {
|
|||
return *this;
|
||||
}
|
||||
|
||||
}
|
||||
} // namespace fc
|
||||
|
|
|
|||
Loading…
Reference in a new issue