Skip to content

Commit 5d17b24

Browse files
author
Steve Hanson
authored
Merge pull request Tencent#1 from Tencent/master
PR for commits 2021/01/12
2 parents 0ccdbf3 + 585042c commit 5d17b24

File tree

3 files changed

+55
-13
lines changed

3 files changed

+55
-13
lines changed

include/rapidjson/document.h

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -289,12 +289,14 @@ class GenericMemberIterator;
289289
//! non-const GenericMemberIterator
290290
template <typename Encoding, typename Allocator>
291291
class GenericMemberIterator<false,Encoding,Allocator> {
292+
public:
292293
//! use plain pointer as iterator type
293294
typedef GenericMember<Encoding,Allocator>* Iterator;
294295
};
295296
//! const GenericMemberIterator
296297
template <typename Encoding, typename Allocator>
297298
class GenericMemberIterator<true,Encoding,Allocator> {
299+
public:
298300
//! use plain const pointer as iterator type
299301
typedef const GenericMember<Encoding,Allocator>* Iterator;
300302
};
@@ -2001,17 +2003,18 @@ class GenericValue {
20012003

20022004
// Initial flags of different types.
20032005
kNullFlag = kNullType,
2004-
kTrueFlag = kTrueType | kBoolFlag,
2005-
kFalseFlag = kFalseType | kBoolFlag,
2006-
kNumberIntFlag = kNumberType | kNumberFlag | kIntFlag | kInt64Flag,
2007-
kNumberUintFlag = kNumberType | kNumberFlag | kUintFlag | kUint64Flag | kInt64Flag,
2008-
kNumberInt64Flag = kNumberType | kNumberFlag | kInt64Flag,
2009-
kNumberUint64Flag = kNumberType | kNumberFlag | kUint64Flag,
2010-
kNumberDoubleFlag = kNumberType | kNumberFlag | kDoubleFlag,
2011-
kNumberAnyFlag = kNumberType | kNumberFlag | kIntFlag | kInt64Flag | kUintFlag | kUint64Flag | kDoubleFlag,
2012-
kConstStringFlag = kStringType | kStringFlag,
2013-
kCopyStringFlag = kStringType | kStringFlag | kCopyFlag,
2014-
kShortStringFlag = kStringType | kStringFlag | kCopyFlag | kInlineStrFlag,
2006+
// These casts are added to suppress the warning on MSVC about bitwise operations between enums of different types.
2007+
kTrueFlag = static_cast<int>(kTrueType) | static_cast<int>(kBoolFlag),
2008+
kFalseFlag = static_cast<int>(kFalseType) | static_cast<int>(kBoolFlag),
2009+
kNumberIntFlag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kIntFlag | kInt64Flag),
2010+
kNumberUintFlag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kUintFlag | kUint64Flag | kInt64Flag),
2011+
kNumberInt64Flag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kInt64Flag),
2012+
kNumberUint64Flag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kUint64Flag),
2013+
kNumberDoubleFlag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kDoubleFlag),
2014+
kNumberAnyFlag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kIntFlag | kInt64Flag | kUintFlag | kUint64Flag | kDoubleFlag),
2015+
kConstStringFlag = static_cast<int>(kStringType) | static_cast<int>(kStringFlag),
2016+
kCopyStringFlag = static_cast<int>(kStringType) | static_cast<int>(kStringFlag | kCopyFlag),
2017+
kShortStringFlag = static_cast<int>(kStringType) | static_cast<int>(kStringFlag | kCopyFlag | kInlineStrFlag),
20152018
kObjectFlag = kObjectType,
20162019
kArrayFlag = kArrayType,
20172020

@@ -2609,6 +2612,7 @@ class GenericArray {
26092612
GenericArray& operator=(const GenericArray& rhs) { value_ = rhs.value_; return *this; }
26102613
~GenericArray() {}
26112614

2615+
operator ValueType&() const { return value_; }
26122616
SizeType Size() const { return value_.Size(); }
26132617
SizeType Capacity() const { return value_.Capacity(); }
26142618
bool Empty() const { return value_.Empty(); }
@@ -2664,6 +2668,7 @@ class GenericObject {
26642668
GenericObject& operator=(const GenericObject& rhs) { value_ = rhs.value_; return *this; }
26652669
~GenericObject() {}
26662670

2671+
operator ValueType&() const { return value_; }
26672672
SizeType MemberCount() const { return value_.MemberCount(); }
26682673
SizeType MemberCapacity() const { return value_.MemberCapacity(); }
26692674
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;

test/unittest/schematest.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2038,8 +2038,13 @@ TEST(SchemaValidator, Ref_remote_issue1210) {
20382038
class SchemaDocumentProvider : public IRemoteSchemaDocumentProvider {
20392039
SchemaDocument** collection;
20402040

2041-
SchemaDocumentProvider(const SchemaDocumentProvider&);
2042-
SchemaDocumentProvider& operator=(const SchemaDocumentProvider&);
2041+
// Dummy private copy constructor & assignment operator.
2042+
// Function bodies added so that they compile in MSVC 2019.
2043+
SchemaDocumentProvider(const SchemaDocumentProvider&) : collection(NULL) {
2044+
}
2045+
SchemaDocumentProvider& operator=(const SchemaDocumentProvider&) {
2046+
return *this;
2047+
}
20432048

20442049
public:
20452050
SchemaDocumentProvider(SchemaDocument** collection) : collection(collection) { }

0 commit comments

Comments
 (0)