Commit a787e8a7 authored by Milo Yip's avatar Milo Yip

Merge branch 'master' of https://github.com/miloyip/rapidjson

parents 27dee111 7bd3b17f
......@@ -363,11 +363,16 @@ public:
return *this;
}
//! Exchange the contents of this value with those of other.
/*!
\param other Another value.
\note Constant complexity.
*/
GenericValue& Swap(GenericValue& other) {
char temp[sizeof(GenericValue)];
memcpy(&temp[0], this, sizeof(GenericValue));
memcpy(this, &other, sizeof(GenericValue));
memcpy(&other, temp, sizeof(GenericValue));
GenericValue temp;
temp.RawAssign(*this);
RawAssign(other);
other.RawAssign(temp);
return *this;
}
......
......@@ -47,6 +47,28 @@ TEST(Document, Parse) {
EXPECT_EQ(i + 1, a[i].GetUint());
}
TEST(Document, Swap) {
Document d1;
Document::AllocatorType& a = d1.GetAllocator();
d1.SetArray().PushBack(1, a).PushBack(2, a);
Value o;
o.SetObject().AddMember("a", 1, a);
// Swap between Document and Value
d1.Swap(o);
EXPECT_TRUE(d1.IsObject());
EXPECT_TRUE(o.IsArray());
// Swap between Document and Document
Document d2;
d2.SetArray().PushBack(3, a);
d1.Swap(d2);
EXPECT_TRUE(d1.IsArray());
EXPECT_TRUE(d2.IsObject());
}
// This should be slow due to assignment in inner-loop.
struct OutputStringStream : public std::ostringstream {
typedef char Ch;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment