decrease dv::value size

This commit is contained in:
MihailRis 2024-09-15 00:28:18 +03:00
parent d703567dc1
commit 464eb9989c

View File

@ -46,7 +46,7 @@ namespace dv {
integer_t integer; integer_t integer;
number_t number; number_t number;
boolean_t boolean; boolean_t boolean;
std::string string; std::unique_ptr<std::string> string;
std::shared_ptr<objects::Object> object; std::shared_ptr<objects::Object> object;
std::shared_ptr<objects::List> list; std::shared_ptr<objects::List> list;
std::shared_ptr<objects::Bytes> bytes; std::shared_ptr<objects::Bytes> bytes;
@ -79,9 +79,9 @@ namespace dv {
} }
value& setString(std::string v) { value& setString(std::string v) {
this->~value(); this->~value();
new(&val.string)std::string(); new(&val.string)std::unique_ptr<std::string>();
type = value_type::string; type = value_type::string;
val.string = std::move(v); *val.string = std::move(v);
return *this; return *this;
} }
value& setList(const std::shared_ptr<objects::List>& ptr) { value& setList(const std::shared_ptr<objects::List>& ptr) {
@ -106,9 +106,7 @@ namespace dv {
return *this; return *this;
} }
public: public:
value() { value() : type(value_type::none) {}
type = value_type::none;
}
value(value_type type); value(value_type type);
template<class T> template<class T>
@ -131,7 +129,7 @@ namespace dv {
val.bytes.reset(); val.bytes.reset();
break; break;
case value_type::string: case value_type::string:
val.string.~basic_string(); val.string.reset();
break; break;
default: default:
break; break;
@ -198,7 +196,7 @@ namespace dv {
setBytes(v.val.bytes); setBytes(v.val.bytes);
break; break;
case value_type::string: case value_type::string:
setString(v.val.string); setString(*v.val.string);
break; break;
case value_type::boolean: case value_type::boolean:
setBoolean(val.boolean); setBoolean(val.boolean);
@ -298,7 +296,7 @@ namespace dv {
val.bytes = nullptr; // no default size val.bytes = nullptr; // no default size
break; break;
case value_type::string: case value_type::string:
val.string = ""; val.string = std::make_unique<std::string>("");
break; break;
default: default:
break; break;