Skip to content

Commit 585042c

Browse files
authored
Merge pull request Tencent#1821 from slsyy/master
Add implicit conversion from Object and Array to Value (Tencent#1404)
2 parents 3cdd3c8 + cbf62de commit 585042c

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

include/rapidjson/document.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2612,6 +2612,7 @@ class GenericArray {
26122612
GenericArray& operator=(const GenericArray& rhs) { value_ = rhs.value_; return *this; }
26132613
~GenericArray() {}
26142614

2615+
operator ValueType&() const { return value_; }
26152616
SizeType Size() const { return value_.Size(); }
26162617
SizeType Capacity() const { return value_.Capacity(); }
26172618
bool Empty() const { return value_.Empty(); }
@@ -2667,6 +2668,7 @@ class GenericObject {
26672668
GenericObject& operator=(const GenericObject& rhs) { value_ = rhs.value_; return *this; }
26682669
~GenericObject() {}
26692670

2671+
operator ValueType&() const { return value_; }
26702672
SizeType MemberCount() const { return value_.MemberCount(); }
26712673
SizeType MemberCapacity() const { return value_.MemberCapacity(); }
26722674
bool ObjectEmpty() const { return value_.ObjectEmpty(); }

test/unittest/pointertest.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1529,6 +1529,38 @@ TEST(Pointer, Ambiguity) {
15291529
}
15301530
}
15311531

1532+
TEST(Pointer, ResolveOnObject) {
1533+
Document d;
1534+
EXPECT_FALSE(d.Parse("{\"a\": 123}").HasParseError());
1535+
1536+
{
1537+
Value::ConstObject o = static_cast<const Document&>(d).GetObject();
1538+
EXPECT_EQ(123, Pointer("/a").Get(o)->GetInt());
1539+
}
1540+
1541+
{
1542+
Value::Object o = d.GetObject();
1543+
Pointer("/a").Set(o, 456, d.GetAllocator());
1544+
EXPECT_EQ(456, Pointer("/a").Get(o)->GetInt());
1545+
}
1546+
}
1547+
1548+
TEST(Pointer, ResolveOnArray) {
1549+
Document d;
1550+
EXPECT_FALSE(d.Parse("[1, 2, 3]").HasParseError());
1551+
1552+
{
1553+
Value::ConstArray a = static_cast<const Document&>(d).GetArray();
1554+
EXPECT_EQ(2, Pointer("/1").Get(a)->GetInt());
1555+
}
1556+
1557+
{
1558+
Value::Array a = d.GetArray();
1559+
Pointer("/1").Set(a, 123, d.GetAllocator());
1560+
EXPECT_EQ(123, Pointer("/1").Get(a)->GetInt());
1561+
}
1562+
}
1563+
15321564
TEST(Pointer, LessThan) {
15331565
static const struct {
15341566
const char *str;

0 commit comments

Comments
 (0)