26 std::swap( _key, e._key );
27 std::swap( _value, e._value );
47 std::swap( _value, v );
55 assert( _key_value !=
nullptr );
56 return _key_value->begin();
61 return _key_value->end();
66 return find( key.c_str() );
71 for(
auto itr =
begin(); itr !=
end(); ++itr )
73 if( itr->key() ==
key )
83 return (*
this)[key.c_str()];
88 auto itr =
find( key );
89 if( itr !=
end() )
return itr->value();
95 return _key_value->size();
99 :_key_value(
std::make_shared<
std::vector<
entry>>() )
104 : _key_value(
std::make_shared<
std::vector<
entry>>())
106 _key_value->emplace_back(
entry(std::move(key), std::move(val)));
110 :_key_value( obj._key_value )
112 assert( _key_value !=
nullptr );
116 : _key_value(
std::move(obj._key_value) )
118 obj._key_value = std::make_shared<std::vector<entry>>();
119 assert( _key_value !=
nullptr );
123 : _key_value(
std::make_shared<
std::vector<
entry>>(*obj._key_value))
128 : _key_value(
std::move(obj._key_value))
130 assert( _key_value !=
nullptr );
137 std::swap(_key_value, obj._key_value );
138 assert( _key_value !=
nullptr );
147 _key_value = obj._key_value;
154 _key_value = std::move(obj._key_value);
155 obj._key_value.reset(
new std::vector<entry>() );
161 *_key_value = *obj._key_value;
180 return _key_value->begin();
185 return _key_value->end();
190 return _key_value->begin();
195 return _key_value->end();
200 return find( key.c_str() );
205 for(
auto itr =
begin(); itr !=
end(); ++itr )
207 if( itr->key() == key )
217 return find( key.c_str() );
222 for(
auto itr =
begin(); itr !=
end(); ++itr )
224 if( itr->key() == key )
234 return (*
this)[key.c_str()];
239 auto itr =
find( key );
240 if( itr !=
end() )
return itr->value();
245 return (*
this)[key.c_str()];
250 auto itr =
find( key );
251 if( itr !=
end() )
return itr->value();
253 return _key_value->back().value();
258 return _key_value->size();
267 : _key_value(new
std::vector<
entry>())
269 _key_value->push_back(
entry(std::move(key), std::move(val)));
273 : _key_value( new
std::vector<
entry>(*obj._key_value) )
278 : _key_value( new
std::vector<
entry>(*obj._key_value) )
283 : _key_value(
std::move(obj._key_value))
289 *_key_value = *obj._key_value;
297 _key_value = std::move(obj._key_value);
306 *_key_value = *obj._key_value;
313 _key_value->reserve(s);
318 for(
auto itr =
begin(); itr !=
end(); ++itr )
320 if( itr->key() == key )
322 _key_value->erase(itr);
331 auto itr =
find( key.c_str() );
334 itr->set( std::move(var) );
338 _key_value->push_back(
entry( std::move(key), std::move(var) ) );
348 _key_value->push_back(
entry( std::move(key), std::move(var) ) );
355 set( e.key(), e.value() );
364 set( e.key(), e.value() );
371 _reached_depth_limit(m == 0),
372 _skip_on_exception(skip_on_exception)
374 if( !skip_on_exception )
375 FC_ASSERT( m > 0,
"Recursion depth exceeded!" );
377 set(
"__err_msg",
"[ERROR: Recusion depth exceeded!]" );
382 if( _reached_depth_limit )
392 if( !_skip_on_exception )
395 set(
"__err_msg",
"[ERROR: Caught exception in operator()( const variant_object& ).]" );
void erase(const string &key)
variant_object & operator=(variant_object &&)
iterator find(const string &key) const
An order-perserving dictionary of variant's.
limited_mutable_variant_object(uint32_t max_depth, bool skip_on_exception=false)
mutable_variant_object & operator()(string key, variant var, uint32_t max_depth=1)
variant_object & get_object()
void to_variant(const flat_set< T, A... > &var, variant &vo, uint32_t _max_depth)
const variant & operator[](const string &key) const
#define FC_ASSERT(TEST,...)
Checks a condition and throws an assert_exception if the test is FALSE.
stores null, int64, uint64, double, bool, string, std::vector<variant>, and variant_object's.
#define FC_THROW_EXCEPTION(EXCEPTION, FORMAT,...)
variant_object::entry entry
a key/value pair
Defines exception's used by fc.
limited_mutable_variant_object & operator()(string key, T &&var)
std::vector< entry >::const_iterator iterator
const variant & value() const
entry & operator=(const entry &)
std::vector< entry >::iterator iterator
void from_variant(const variant &var, flat_set< T, A... > &vo, uint32_t _max_depth)
mutable_variant_object & set(string key, variant var)
iterator find(const string &key) const
mutable_variant_object & operator=(mutable_variant_object &&)
const variant & operator[](const string &key) const
An order-perserving dictionary of variant's.
const string & key() const