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& ).]" );