diff --git a/include/fc/variant_object.hpp b/include/fc/variant_object.hpp index 55077ee..5a39c80 100644 --- a/include/fc/variant_object.hpp +++ b/include/fc/variant_object.hpp @@ -176,6 +176,14 @@ namespace fc set(std::move(key), variant( fc::forward(var) ) ); return *this; } + /** + * Copy a variant_object into this mutable_variant_object. + */ + mutable_variant_object& operator()( const variant_object& vo ); + /** + * Copy another mutable_variant_object into this mutable_variant_object. + */ + mutable_variant_object& operator()( const mutable_variant_object& mvo ); ///@} diff --git a/src/variant_object.cpp b/src/variant_object.cpp index f3cb488..6f3b1dc 100644 --- a/src/variant_object.cpp +++ b/src/variant_object.cpp @@ -350,6 +350,22 @@ namespace fc return *this; } + mutable_variant_object& mutable_variant_object::operator()( const variant_object& vo ) + { + for( const variant_object::entry& e : vo ) + set( e.key(), e.value() ); + return *this; + } + + mutable_variant_object& mutable_variant_object::operator()( const mutable_variant_object& mvo ) + { + if( &mvo == this ) // mvo(mvo) is no-op + return *this; + for( const mutable_variant_object::entry& e : mvo ) + set( e.key(), e.value() ); + return *this; + } + void to_variant( const mutable_variant_object& var, variant& vo ) { vo = variant(var);