addding improved support for serializing boost interprocss types
This commit is contained in:
parent
3c6d7d9fe3
commit
fb4ddbac0d
3 changed files with 43 additions and 0 deletions
|
|
@ -54,6 +54,35 @@ namespace fc {
|
||||||
value.insert( std::move(tmp) );
|
value.insert( std::move(tmp) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename Stream, typename T, typename A>
|
||||||
|
void pack( Stream& s, const bip::vector<T,A>& value ) {
|
||||||
|
pack( s, unsigned_int((uint32_t)value.size()) );
|
||||||
|
if( !std::is_fundamental<T>::value ) {
|
||||||
|
auto itr = value.begin();
|
||||||
|
auto end = value.end();
|
||||||
|
while( itr != end ) {
|
||||||
|
fc::raw::pack( s, *itr );
|
||||||
|
++itr;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
s.write( (const char*)value.data(), value.size() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename Stream, typename T, typename A>
|
||||||
|
void unpack( Stream& s, bip::vector<T,A>& value ) {
|
||||||
|
unsigned_int size;
|
||||||
|
unpack( s, size );
|
||||||
|
value.resize( size );
|
||||||
|
if( !std::is_fundamental<T>::value ) {
|
||||||
|
for( auto& item : value )
|
||||||
|
unpack( s, item );
|
||||||
|
} else {
|
||||||
|
s.read( (char*)value.data(), value.size() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace raw
|
} // namespace raw
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <boost/container/flat_map.hpp>
|
#include <boost/container/flat_map.hpp>
|
||||||
#include <boost/container/flat_set.hpp>
|
#include <boost/container/flat_set.hpp>
|
||||||
|
#include <boost/interprocess/containers/vector.hpp>
|
||||||
|
|
||||||
namespace fc {
|
namespace fc {
|
||||||
|
|
||||||
using boost::container::flat_map;
|
using boost::container::flat_map;
|
||||||
using boost::container::flat_set;
|
using boost::container::flat_set;
|
||||||
|
namespace bip = boost::interprocess;
|
||||||
|
|
||||||
namespace raw {
|
namespace raw {
|
||||||
template<typename Stream, typename T>
|
template<typename Stream, typename T>
|
||||||
|
|
@ -16,6 +18,12 @@ namespace fc {
|
||||||
void pack( Stream& s, const flat_map<K,V...>& value );
|
void pack( Stream& s, const flat_map<K,V...>& value );
|
||||||
template<typename Stream, typename K, typename... V>
|
template<typename Stream, typename K, typename... V>
|
||||||
void unpack( Stream& s, flat_map<K,V...>& value ) ;
|
void unpack( Stream& s, flat_map<K,V...>& value ) ;
|
||||||
|
|
||||||
|
|
||||||
|
template<typename Stream, typename T, typename A>
|
||||||
|
void pack( Stream& s, const bip::vector<T,A>& value );
|
||||||
|
template<typename Stream, typename T, typename A>
|
||||||
|
void unpack( Stream& s, bip::vector<T,A>& value );
|
||||||
} // namespace raw
|
} // namespace raw
|
||||||
|
|
||||||
} // fc
|
} // fc
|
||||||
|
|
|
||||||
|
|
@ -312,6 +312,12 @@ namespace fc
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void as( T& v )const
|
||||||
|
{
|
||||||
|
from_variant( *this, v );
|
||||||
|
}
|
||||||
|
|
||||||
variant& operator=( variant&& v );
|
variant& operator=( variant&& v );
|
||||||
variant& operator=( const variant& v );
|
variant& operator=( const variant& v );
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue