@@ -28,13 +28,6 @@ inline value::~value() {
2828 }
2929}
3030
31- // ------------------------------------------------------------------------------
32- // Name: value
33- // ------------------------------------------------------------------------------
34- inline value::value () : type_(type_invalid) {
35-
36- }
37-
3831// ------------------------------------------------------------------------------
3932// Name: value
4033// ------------------------------------------------------------------------------
@@ -92,6 +85,42 @@ inline value::value(bool b) : type_(type_boolean) {
9285 new (&value_) std::string (b ? " true" : " false" );
9386}
9487
88+ // ------------------------------------------------------------------------------
89+ // Name: value
90+ // ------------------------------------------------------------------------------
91+ inline value::value (value &&other) : type_(other.type_) {
92+
93+ other.type_ = type::type_invalid;
94+
95+ // move from the other object
96+ switch (type_) {
97+ case value::type_string:
98+ case value::type_number:
99+ case value::type_null:
100+ case value::type_boolean:
101+ new (&value_) std::string (std::move (*reinterpret_cast <std::string *>(&other.value_ )));
102+ break ;
103+ case value::type_array:
104+ new (&value_) array_pointer (std::move (*reinterpret_cast <array_pointer *>(&other.value_ )));
105+ break ;
106+ case value::type_object:
107+ new (&value_) object_pointer (std::move (*reinterpret_cast <object_pointer *>(&other.value_ )));
108+ break ;
109+ case value::type_invalid:
110+ break ;
111+ }
112+ }
113+
114+ // ------------------------------------------------------------------------------
115+ // Name: operator=
116+ // ------------------------------------------------------------------------------
117+ inline value &value::operator =(value &&rhs) {
118+ if (this != &rhs) {
119+ value (std::move (rhs)).swap (*this );
120+ }
121+ return *this ;
122+ }
123+
95124// ------------------------------------------------------------------------------
96125// Name: value
97126// ------------------------------------------------------------------------------
0 commit comments