datadiode 2015-01-18 10:05:25 +01:00
parent 62ab94ddd3
commit c07ef37904
2 changed files with 10 additions and 4 deletions

View File

@ -240,8 +240,6 @@ Json::Value obj_value(Json::objectValue); // {}
Value& operator=(Value other); Value& operator=(Value other);
/// Swap values. /// Swap values.
/// \note Currently, comments are intentionally not swapped, for
/// both logic and efficiency.
void swap(Value& other); void swap(Value& other);
ValueType type() const; ValueType type() const;
@ -444,6 +442,9 @@ private:
Value& resolveReference(const char* key, bool isStatic); 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 #ifdef JSON_VALUE_USE_INTERNAL_MAP
inline bool isItemAvailable() const { return itemIsUsed_ == 0; } inline bool isItemAvailable() const { return itemIsUsed_ == 0; }

View File

@ -406,11 +406,11 @@ Value::~Value() {
} }
Value& Value::operator=(Value other) { Value& Value::operator=(Value other) {
swap(other); swapPayload(other);
return *this; return *this;
} }
void Value::swap(Value& other) { void Value::swapPayload(Value& other) {
ValueType temp = type_; ValueType temp = type_;
type_ = other.type_; type_ = other.type_;
other.type_ = temp; other.type_ = temp;
@ -418,6 +418,11 @@ void Value::swap(Value& other) {
int temp2 = allocated_; int temp2 = allocated_;
allocated_ = other.allocated_; allocated_ = other.allocated_;
other.allocated_ = temp2; other.allocated_ = temp2;
}
void Value::swap(Value& other) {
swapPayload(other);
std::swap(comments_, other.comments_);
std::swap(start_, other.start_); std::swap(start_, other.start_);
std::swap(limit_, other.limit_); std::swap(limit_, other.limit_);
} }