diff --git a/include/fc/variant.hpp b/include/fc/variant.hpp index 9772787..aff502c 100644 --- a/include/fc/variant.hpp +++ b/include/fc/variant.hpp @@ -41,6 +41,8 @@ namespace fc void from_variant( const variant& var, blob& vo ); template void to_variant( const safe& s, variant& v ); template void from_variant( const variant& v, safe& s ); + template void to_variant( const std::unique_ptr& s, variant& v ); + template void from_variant( const variant& v, std::unique_ptr& s ); template void to_variant( const static_variant& s, variant& v ); template void from_variant( const variant& v, static_variant& s ); @@ -502,6 +504,23 @@ namespace fc from_variant( var, *vo ); } } + template + void to_variant( const std::unique_ptr& var, variant& vo ) + { + if( var ) to_variant( *var, vo ); + else vo = nullptr; + } + + template + void from_variant( const variant& var, std::unique_ptr& vo ) + { + if( var.is_null() ) vo.reset(); + else if( vo ) from_variant( var, *vo ); + else { + vo.reset( new T() ); + from_variant( var, *vo ); + } + } template @@ -510,6 +529,7 @@ namespace fc template void from_variant( const variant& v, safe& s ) { s.value = v.as_uint64(); } + variant operator + ( const variant& a, const variant& b ); variant operator - ( const variant& a, const variant& b ); variant operator * ( const variant& a, const variant& b );