|
|
|
@ -278,7 +278,7 @@ void Space::set_empty_table()
|
|
|
|
|
{
|
|
|
|
|
if( type == type_table )
|
|
|
|
|
{
|
|
|
|
|
value.value_table.clear();
|
|
|
|
|
remove_value_table(true);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -290,7 +290,7 @@ void Space::set_empty_object()
|
|
|
|
|
{
|
|
|
|
|
if( type == type_object )
|
|
|
|
|
{
|
|
|
|
|
value.value_object.clear();
|
|
|
|
|
remove_value_object(true);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -629,9 +629,16 @@ Space & Space::add(const wchar_t * field, const Space * space)
|
|
|
|
|
Space & Space::add(const wchar_t * field, Space && space)
|
|
|
|
|
{
|
|
|
|
|
initialize_value_object_if_needed();
|
|
|
|
|
|
|
|
|
|
auto insert_res = value.value_object.insert(std::make_pair(field, nullptr));
|
|
|
|
|
insert_res.first->second = new Space(std::move(space));
|
|
|
|
|
|
|
|
|
|
if( insert_res.second )
|
|
|
|
|
{
|
|
|
|
|
insert_res.first->second = new Space(std::move(space));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
insert_res.first->second->set(std::move(space));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return *(insert_res.first->second);
|
|
|
|
|
}
|
|
|
|
@ -2082,8 +2089,7 @@ bool Space::has_value(const wchar_t * field, const std::wstring & val) const
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Space::copy_value_from(const Space & space)
|
|
|
|
|
void Space::copy_from(const Space & space)
|
|
|
|
|
{
|
|
|
|
|
switch(space.type)
|
|
|
|
|
{
|
|
|
|
@ -2138,19 +2144,18 @@ void Space::copy_value_from(const Space & space)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Space::copy_from(const Space & space)
|
|
|
|
|
{
|
|
|
|
|
copy_value_from(space);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Space::copy_value_object(const Value & value_from)
|
|
|
|
|
{
|
|
|
|
|
initialize_value_object_if_needed();
|
|
|
|
|
value.value_object.clear();
|
|
|
|
|
if( type == type_object )
|
|
|
|
|
{
|
|
|
|
|
remove_value_object(true);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
initialize_value_object_if_needed();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(auto map_item : value_from.value_object)
|
|
|
|
|
{
|
|
|
|
@ -2162,8 +2167,14 @@ void Space::copy_value_object(const Value & value_from)
|
|
|
|
|
|
|
|
|
|
void Space::copy_value_table(const Value & value_from)
|
|
|
|
|
{
|
|
|
|
|
initialize_value_table_if_needed();
|
|
|
|
|
value.value_table.clear();
|
|
|
|
|
if( type == type_table )
|
|
|
|
|
{
|
|
|
|
|
remove_value_table(true);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
initialize_value_table_if_needed();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(Space * space : value_from.value_table)
|
|
|
|
|
{
|
|
|
|
@ -2194,7 +2205,7 @@ void Space::move_value_from(Space && space)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
copy_value_from(space);
|
|
|
|
|
copy_from(space);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -2351,6 +2362,7 @@ void Space::initialize_value_object_if_needed(ObjectType && obj)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
remove_value_object(true);
|
|
|
|
|
value.value_object = std::move(obj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -2377,6 +2389,7 @@ void Space::initialize_value_table_if_needed(TableType && tab)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
remove_value_table(true);
|
|
|
|
|
value.value_table = std::move(tab);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -2438,7 +2451,7 @@ void Space::remove_value_wstring()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Space::remove_value_object()
|
|
|
|
|
void Space::remove_value_object(bool only_clear)
|
|
|
|
|
{
|
|
|
|
|
for(auto map_item : value.value_object)
|
|
|
|
|
{
|
|
|
|
@ -2446,12 +2459,19 @@ void Space::remove_value_object()
|
|
|
|
|
map_item.second = nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
value.value_object.~ObjectType();
|
|
|
|
|
type = type_null;
|
|
|
|
|
if( only_clear )
|
|
|
|
|
{
|
|
|
|
|
value.value_object.clear();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
value.value_object.~ObjectType();
|
|
|
|
|
type = type_null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Space::remove_value_table()
|
|
|
|
|
void Space::remove_value_table(bool only_clear)
|
|
|
|
|
{
|
|
|
|
|
for(size_t i = 0 ; i < value.value_table.size() ; ++i)
|
|
|
|
|
{
|
|
|
|
@ -2459,8 +2479,15 @@ void Space::remove_value_table()
|
|
|
|
|
value.value_table[i] = nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
value.value_table.~TableType();
|
|
|
|
|
type = type_null;
|
|
|
|
|
if( only_clear )
|
|
|
|
|
{
|
|
|
|
|
value.value_table.clear();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
value.value_table.~TableType();
|
|
|
|
|
type = type_null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|