diff --git a/include/json/value.h b/include/json/value.h index 197a856..3473c7e 100644 --- a/include/json/value.h +++ b/include/json/value.h @@ -240,8 +240,6 @@ Json::Value obj_value(Json::objectValue); // {} Value& operator=(Value other); /// Swap values. - /// \note Currently, comments are intentionally not swapped, for - /// both logic and efficiency. void swap(Value& other); ValueType type() const; @@ -444,6 +442,9 @@ private: Value& resolveReference(const char* key, bool isStatic); + /// Swap values but leave comments and source offsets in place. + void swapPayload(Value& other); + #ifdef JSON_VALUE_USE_INTERNAL_MAP inline bool isItemAvailable() const { return itemIsUsed_ == 0; } diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp index b73deac..85b26ce 100644 --- a/src/lib_json/json_value.cpp +++ b/src/lib_json/json_value.cpp @@ -406,11 +406,11 @@ Value::~Value() { } Value& Value::operator=(Value other) { - swap(other); + swapPayload(other); return *this; } -void Value::swap(Value& other) { +void Value::swapPayload(Value& other) { ValueType temp = type_; type_ = other.type_; other.type_ = temp; @@ -418,6 +418,11 @@ void Value::swap(Value& other) { int temp2 = allocated_; allocated_ = other.allocated_; other.allocated_ = temp2; +} + +void Value::swap(Value& other) { + swapPayload(other); + std::swap(comments_, other.comments_); std::swap(start_, other.start_); std::swap(limit_, other.limit_); }