https://github.com/open-source-parsers/jsoncpp/issues/47
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 @@
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 @@
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::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 @@
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_);
}