Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
R
rapidjson
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
rapidjson
Commits
bb0e8289
Commit
bb0e8289
authored
May 03, 2015
by
miloyip
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Some std::string overloads for Pointer
parent
0eb6cb8e
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
192 additions
and
100 deletions
+192
-100
pointer.h
include/rapidjson/pointer.h
+126
-100
CMakeLists.txt
test/unittest/CMakeLists.txt
+2
-0
pointertest.cpp
test/unittest/pointertest.cpp
+64
-0
No files found.
include/rapidjson/pointer.h
View file @
bb0e8289
...
@@ -42,61 +42,25 @@ public:
...
@@ -42,61 +42,25 @@ public:
SizeType
index
;
//!< A valid index if not equal to kPointerInvalidIndex.
SizeType
index
;
//!< A valid index if not equal to kPointerInvalidIndex.
};
};
GenericPointer
()
:
GenericPointer
()
:
allocator_
(),
ownAllocator_
(),
nameBuffer_
(),
tokens_
(),
tokenCount_
(),
parseErrorOffset_
(),
parseErrorCode_
(
kPointerParseErrorNone
)
{}
allocator_
(),
ownAllocator_
(),
nameBuffer_
(),
tokens_
(),
tokenCount_
(),
parseErrorOffset_
(),
parseErrorCode_
(
kPointerParseErrorNone
)
{
}
explicit
GenericPointer
(
const
Ch
*
source
,
Allocator
*
allocator
=
0
)
:
explicit
GenericPointer
(
const
Ch
*
source
,
Allocator
*
allocator
=
0
)
:
allocator_
(
allocator
),
ownAllocator_
(),
nameBuffer_
(),
tokens_
(),
tokenCount_
(),
parseErrorOffset_
(),
parseErrorCode_
(
kPointerParseErrorNone
)
{
allocator_
(
allocator
),
ownAllocator_
(),
nameBuffer_
(),
tokens_
(),
tokenCount_
(),
parseErrorOffset_
(),
parseErrorCode_
(
kPointerParseErrorNone
)
{
Parse
(
source
,
internal
::
StrLen
(
source
));
Parse
(
source
,
internal
::
StrLen
(
source
));
}
}
GenericPointer
(
const
Ch
*
source
,
size_t
length
,
Allocator
*
allocator
=
0
)
:
#if RAPIDJSON_HAS_STDSTRING
allocator_
(
allocator
),
explicit
GenericPointer
(
const
std
::
basic_string
<
Ch
>&
source
,
Allocator
*
allocator
=
0
)
:
allocator_
(
allocator
),
ownAllocator_
(),
nameBuffer_
(),
tokens_
(),
tokenCount_
(),
parseErrorOffset_
(),
parseErrorCode_
(
kPointerParseErrorNone
)
{
ownAllocator_
(),
Parse
(
source
.
c_str
(),
source
.
size
());
nameBuffer_
(),
tokens_
(),
tokenCount_
(),
parseErrorOffset_
(),
parseErrorCode_
(
kPointerParseErrorNone
)
{
Parse
(
source
,
length
);
}
}
#endif
GenericPointer
(
const
Token
*
tokens
,
size_t
tokenCount
)
:
GenericPointer
(
const
Ch
*
source
,
size_t
length
,
Allocator
*
allocator
=
0
)
:
allocator_
(
allocator
),
ownAllocator_
(),
nameBuffer_
(),
tokens_
(),
tokenCount_
(),
parseErrorOffset_
(),
parseErrorCode_
(
kPointerParseErrorNone
)
{
allocator_
(),
Parse
(
source
,
length
);
ownAllocator_
(),
nameBuffer_
(),
tokens_
(
const_cast
<
Token
*>
(
tokens
)),
tokenCount_
(
tokenCount
),
parseErrorOffset_
(),
parseErrorCode_
(
kPointerParseErrorNone
)
{
}
}
GenericPointer
(
const
GenericPointer
&
rhs
)
:
GenericPointer
(
const
Token
*
tokens
,
size_t
tokenCount
)
:
allocator_
(),
ownAllocator_
(),
nameBuffer_
(),
tokens_
(
const_cast
<
Token
*>
(
tokens
)),
tokenCount_
(
tokenCount
),
parseErrorOffset_
(),
parseErrorCode_
(
kPointerParseErrorNone
)
{}
allocator_
(),
ownAllocator_
(),
GenericPointer
(
const
GenericPointer
&
rhs
)
:
allocator_
(),
ownAllocator_
(),
nameBuffer_
(),
tokens_
(),
tokenCount_
(),
parseErrorOffset_
(),
parseErrorCode_
(
kPointerParseErrorNone
)
{
nameBuffer_
(),
tokens_
(),
tokenCount_
(),
parseErrorOffset_
(),
parseErrorCode_
(
kPointerParseErrorNone
)
{
*
this
=
rhs
;
*
this
=
rhs
;
}
}
...
@@ -255,9 +219,7 @@ public:
...
@@ -255,9 +219,7 @@ public:
return
v
;
return
v
;
}
}
const
ValueType
*
Get
(
const
ValueType
&
root
)
const
{
const
ValueType
*
Get
(
const
ValueType
&
root
)
const
{
return
Get
(
const_cast
<
ValueType
&>
(
root
));
}
return
Get
(
const_cast
<
ValueType
&>
(
root
));
}
ValueType
&
GetWithDefault
(
ValueType
&
root
,
const
ValueType
&
defaultValue
,
typename
ValueType
::
AllocatorType
&
allocator
)
const
{
ValueType
&
GetWithDefault
(
ValueType
&
root
,
const
ValueType
&
defaultValue
,
typename
ValueType
::
AllocatorType
&
allocator
)
const
{
bool
alreadyExist
;
bool
alreadyExist
;
...
@@ -284,6 +246,18 @@ public:
...
@@ -284,6 +246,18 @@ public:
return
v
;
return
v
;
}
}
#if RAPIDJSON_HAS_STDSTRING
ValueType
&
GetWithDefault
(
ValueType
&
root
,
const
std
::
basic_string
<
Ch
>&
defaultValue
,
typename
ValueType
::
AllocatorType
&
allocator
)
const
{
bool
alreadyExist
;
Value
&
v
=
Create
(
root
,
allocator
,
&
alreadyExist
);
if
(
!
alreadyExist
)
{
Value
clone
(
defaultValue
,
allocator
);
// This has overhead, so do it inside if.
v
=
clone
;
}
return
v
;
}
#endif
template
<
typename
T
>
template
<
typename
T
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T
>
,
internal
::
IsGenericValue
<
T
>
>
),
(
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T
>
,
internal
::
IsGenericValue
<
T
>
>
),
(
ValueType
&
))
GetWithDefault
(
ValueType
&
root
,
T
defaultValue
,
typename
ValueType
::
AllocatorType
&
allocator
)
const
{
GetWithDefault
(
ValueType
&
root
,
T
defaultValue
,
typename
ValueType
::
AllocatorType
&
allocator
)
const
{
...
@@ -306,6 +280,13 @@ public:
...
@@ -306,6 +280,13 @@ public:
return
GetWithDefault
(
root
,
defaultValue
,
root
.
GetAllocator
());
return
GetWithDefault
(
root
,
defaultValue
,
root
.
GetAllocator
());
}
}
#if RAPIDJSON_HAS_STDSTRING
template
<
typename
stackAllocator
>
ValueType
&
GetWithDefault
(
GenericDocument
<
EncodingType
,
typename
ValueType
::
AllocatorType
,
stackAllocator
>&
root
,
const
std
::
basic_string
<
Ch
>&
defaultValue
)
const
{
return
GetWithDefault
(
root
,
defaultValue
,
root
.
GetAllocator
());
}
#endif
template
<
typename
T
,
typename
stackAllocator
>
template
<
typename
T
,
typename
stackAllocator
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T
>
,
internal
::
IsGenericValue
<
T
>
>
),
(
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T
>
,
internal
::
IsGenericValue
<
T
>
>
),
(
ValueType
&
))
GetWithDefault
(
GenericDocument
<
EncodingType
,
typename
ValueType
::
AllocatorType
,
stackAllocator
>&
root
,
T
defaultValue
)
const
{
GetWithDefault
(
GenericDocument
<
EncodingType
,
typename
ValueType
::
AllocatorType
,
stackAllocator
>&
root
,
T
defaultValue
)
const
{
...
@@ -332,6 +313,13 @@ public:
...
@@ -332,6 +313,13 @@ public:
return
Create
(
root
,
allocator
)
=
v
;
return
Create
(
root
,
allocator
)
=
v
;
}
}
#if RAPIDJSON_HAS_STDSTRING
ValueType
&
Set
(
ValueType
&
root
,
const
std
::
basic_string
<
Ch
>&
value
,
typename
ValueType
::
AllocatorType
&
allocator
)
const
{
ValueType
v
(
value
,
allocator
);
return
Create
(
root
,
allocator
)
=
v
;
}
#endif
template
<
typename
T
>
template
<
typename
T
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T
>
,
internal
::
IsGenericValue
<
T
>
>
),
(
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T
>
,
internal
::
IsGenericValue
<
T
>
>
),
(
ValueType
&
))
Set
(
ValueType
&
root
,
T
value
,
typename
ValueType
::
AllocatorType
&
allocator
)
const
{
Set
(
ValueType
&
root
,
T
value
,
typename
ValueType
::
AllocatorType
&
allocator
)
const
{
...
@@ -351,21 +339,25 @@ public:
...
@@ -351,21 +339,25 @@ public:
template
<
typename
stackAllocator
>
template
<
typename
stackAllocator
>
ValueType
&
Set
(
GenericDocument
<
EncodingType
,
typename
ValueType
::
AllocatorType
,
stackAllocator
>&
root
,
GenericStringRef
<
Ch
>
value
)
const
{
ValueType
&
Set
(
GenericDocument
<
EncodingType
,
typename
ValueType
::
AllocatorType
,
stackAllocator
>&
root
,
GenericStringRef
<
Ch
>
value
)
const
{
ValueType
v
(
value
);
return
Create
(
root
)
=
value
;
return
Create
(
root
)
=
v
;
}
}
template
<
typename
stackAllocator
>
template
<
typename
stackAllocator
>
ValueType
&
Set
(
GenericDocument
<
EncodingType
,
typename
ValueType
::
AllocatorType
,
stackAllocator
>&
root
,
const
Ch
*
value
)
const
{
ValueType
&
Set
(
GenericDocument
<
EncodingType
,
typename
ValueType
::
AllocatorType
,
stackAllocator
>&
root
,
const
Ch
*
value
)
const
{
ValueType
v
(
value
,
root
.
GetAllocator
());
return
Create
(
root
)
=
ValueType
(
value
,
root
.
GetAllocator
()).
Move
();
return
Create
(
root
)
=
v
;
}
#if RAPIDJSON_HAS_STDSTRING
template
<
typename
stackAllocator
>
ValueType
&
Set
(
GenericDocument
<
EncodingType
,
typename
ValueType
::
AllocatorType
,
stackAllocator
>&
root
,
const
std
::
basic_string
<
Ch
>&
value
)
const
{
return
Create
(
root
)
=
ValueType
(
value
,
root
.
GetAllocator
()).
Move
();
}
}
#endif
template
<
typename
T
,
typename
stackAllocator
>
template
<
typename
T
,
typename
stackAllocator
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T
>
,
internal
::
IsGenericValue
<
T
>
>
),
(
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T
>
,
internal
::
IsGenericValue
<
T
>
>
),
(
ValueType
&
))
Set
(
GenericDocument
<
EncodingType
,
typename
ValueType
::
AllocatorType
,
stackAllocator
>&
root
,
T
value
)
const
{
Set
(
GenericDocument
<
EncodingType
,
typename
ValueType
::
AllocatorType
,
stackAllocator
>&
root
,
T
value
)
const
{
ValueType
v
(
value
);
return
Create
(
root
)
=
value
;
return
Create
(
root
)
=
v
;
}
}
// Create parents if non-exist
// Create parents if non-exist
...
@@ -628,8 +620,7 @@ typename T::ValueType& CreateValueByPointer(T& root, const GenericPointer<typena
...
@@ -628,8 +620,7 @@ typename T::ValueType& CreateValueByPointer(T& root, const GenericPointer<typena
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
CreateValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
typename
T
::
AllocatorType
&
a
)
{
typename
T
::
ValueType
&
CreateValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
typename
T
::
AllocatorType
&
a
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Create
(
root
,
a
);
return
CreateValueByPointer
(
root
,
pointer
,
a
);
}
}
// No allocator parameter
// No allocator parameter
...
@@ -641,8 +632,7 @@ typename T::ValueType& CreateValueByPointer(T& root, const GenericPointer<typena
...
@@ -641,8 +632,7 @@ typename T::ValueType& CreateValueByPointer(T& root, const GenericPointer<typena
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
CreateValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
])
{
typename
T
::
ValueType
&
CreateValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
])
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Create
(
root
);
return
CreateValueByPointer
(
root
,
pointer
);
}
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
...
@@ -659,14 +649,12 @@ const typename T::ValueType* GetValueByPointer(const T& root, const GenericPoint
...
@@ -659,14 +649,12 @@ const typename T::ValueType* GetValueByPointer(const T& root, const GenericPoint
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
*
GetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
])
{
typename
T
::
ValueType
*
GetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
])
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Get
(
root
);
return
GetValueByPointer
(
root
,
pointer
);
}
}
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
const
typename
T
::
ValueType
*
GetValueByPointer
(
const
T
&
root
,
const
CharType
(
&
source
)[
N
])
{
const
typename
T
::
ValueType
*
GetValueByPointer
(
const
T
&
root
,
const
CharType
(
&
source
)[
N
])
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Get
(
root
);
return
GetValueByPointer
(
root
,
pointer
);
}
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
...
@@ -686,6 +674,13 @@ typename T::ValueType& GetValueByPointerWithDefault(T& root, const GenericPointe
...
@@ -686,6 +674,13 @@ typename T::ValueType& GetValueByPointerWithDefault(T& root, const GenericPointe
return
pointer
.
GetWithDefault
(
root
,
defaultValue
,
a
);
return
pointer
.
GetWithDefault
(
root
,
defaultValue
,
a
);
}
}
#if RAPIDJSON_HAS_STDSTRING
template
<
typename
T
>
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
const
std
::
basic_string
<
typename
T
::
Ch
>&
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
return
pointer
.
GetWithDefault
(
root
,
defaultValue
,
a
);
}
#endif
template
<
typename
T
,
typename
T2
>
template
<
typename
T
,
typename
T2
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
GetValueByPointerWithDefault
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
T2
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
GetValueByPointerWithDefault
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
T2
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
...
@@ -694,27 +689,30 @@ GetValueByPointerWithDefault(T& root, const GenericPointer<typename T::ValueType
...
@@ -694,27 +689,30 @@ GetValueByPointerWithDefault(T& root, const GenericPointer<typename T::ValueType
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
ValueType
&
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
ValueType
&
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
GetWithDefault
(
root
,
defaultValue
,
a
);
return
GetValueByPointerWithDefault
(
root
,
pointer
,
defaultValue
,
a
);
}
}
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
GenericStringRef
<
typename
T
::
Ch
>
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
GenericStringRef
<
typename
T
::
Ch
>
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
GetWithDefault
(
root
,
defaultValue
,
a
);
return
GetValueByPointerWithDefault
(
root
,
pointer
,
defaultValue
,
a
);
}
}
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
Ch
*
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
Ch
*
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
GetWithDefault
(
root
,
defaultValue
,
a
);
return
GetValueByPointerWithDefault
(
root
,
pointer
,
defaultValue
,
a
);
}
#if RAPIDJSON_HAS_STDSTRING
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
std
::
basic_string
<
typename
T
::
Ch
>&
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
GetWithDefault
(
root
,
defaultValue
,
a
);
}
}
#endif
template
<
typename
T
,
typename
CharType
,
size_t
N
,
typename
T2
>
template
<
typename
T
,
typename
CharType
,
size_t
N
,
typename
T2
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
T2
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
T2
defaultValue
,
typename
T
::
AllocatorType
&
a
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
GetWithDefault
(
root
,
defaultValue
,
a
);
return
GetValueByPointerWithDefault
(
root
,
pointer
,
defaultValue
,
a
);
}
}
// No allocator parameter
// No allocator parameter
...
@@ -734,6 +732,13 @@ typename T::ValueType& GetValueByPointerWithDefault(T& root, const GenericPointe
...
@@ -734,6 +732,13 @@ typename T::ValueType& GetValueByPointerWithDefault(T& root, const GenericPointe
return
pointer
.
GetWithDefault
(
root
,
defaultValue
);
return
pointer
.
GetWithDefault
(
root
,
defaultValue
);
}
}
#if RAPIDJSON_HAS_STDSTRING
template
<
typename
T
>
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
const
std
::
basic_string
<
typename
T
::
Ch
>&
defaultValue
)
{
return
pointer
.
GetWithDefault
(
root
,
defaultValue
);
}
#endif
template
<
typename
T
,
typename
T2
>
template
<
typename
T
,
typename
T2
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
GetValueByPointerWithDefault
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
T2
defaultValue
)
{
GetValueByPointerWithDefault
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
T2
defaultValue
)
{
...
@@ -742,27 +747,30 @@ GetValueByPointerWithDefault(T& root, const GenericPointer<typename T::ValueType
...
@@ -742,27 +747,30 @@ GetValueByPointerWithDefault(T& root, const GenericPointer<typename T::ValueType
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
ValueType
&
defaultValue
)
{
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
ValueType
&
defaultValue
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
GetWithDefault
(
root
,
defaultValue
);
return
GetValueByPointerWithDefault
(
root
,
pointer
,
defaultValue
);
}
}
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
GenericStringRef
<
typename
T
::
Ch
>
defaultValue
)
{
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
GenericStringRef
<
typename
T
::
Ch
>
defaultValue
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
GetWithDefault
(
root
,
defaultValue
);
return
GetValueByPointerWithDefault
(
root
,
pointer
,
defaultValue
);
}
}
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
Ch
*
defaultValue
)
{
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
Ch
*
defaultValue
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
GetWithDefault
(
root
,
defaultValue
);
return
GetValueByPointerWithDefault
(
root
,
pointer
,
defaultValue
);
}
}
#if RAPIDJSON_HAS_STDSTRING
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
std
::
basic_string
<
typename
T
::
Ch
>&
defaultValue
)
{
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
GetWithDefault
(
root
,
defaultValue
);
}
#endif
template
<
typename
T
,
typename
CharType
,
size_t
N
,
typename
T2
>
template
<
typename
T
,
typename
CharType
,
size_t
N
,
typename
T2
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
T2
defaultValue
)
{
GetValueByPointerWithDefault
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
T2
defaultValue
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
GetWithDefault
(
root
,
defaultValue
);
return
GetValueByPointerWithDefault
(
root
,
pointer
,
defaultValue
);
}
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
...
@@ -782,6 +790,13 @@ typename T::ValueType& SetValueByPointer(T& root, const GenericPointer<typename
...
@@ -782,6 +790,13 @@ typename T::ValueType& SetValueByPointer(T& root, const GenericPointer<typename
return
pointer
.
Set
(
root
,
value
,
a
);
return
pointer
.
Set
(
root
,
value
,
a
);
}
}
#if RAPIDJSON_HAS_STDSTRING
template
<
typename
T
>
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
const
std
::
basic_string
<
typename
T
::
Ch
>&
value
,
typename
T
::
AllocatorType
&
a
)
{
return
pointer
.
Set
(
root
,
value
,
a
);
}
#endif
template
<
typename
T
,
typename
T2
>
template
<
typename
T
,
typename
T2
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
SetValueByPointer
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
T2
value
,
typename
T
::
AllocatorType
&
a
)
{
SetValueByPointer
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
T2
value
,
typename
T
::
AllocatorType
&
a
)
{
...
@@ -790,27 +805,30 @@ SetValueByPointer(T& root, const GenericPointer<typename T::ValueType>& pointer,
...
@@ -790,27 +805,30 @@ SetValueByPointer(T& root, const GenericPointer<typename T::ValueType>& pointer,
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
typename
T
::
ValueType
&
value
,
typename
T
::
AllocatorType
&
a
)
{
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
typename
T
::
ValueType
&
value
,
typename
T
::
AllocatorType
&
a
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Set
(
root
,
value
,
a
);
return
SetValueByPointer
(
root
,
pointer
,
value
,
a
);
}
}
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
GenericStringRef
<
typename
T
::
Ch
>
value
,
typename
T
::
AllocatorType
&
a
)
{
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
GenericStringRef
<
typename
T
::
Ch
>
value
,
typename
T
::
AllocatorType
&
a
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Set
(
root
,
value
,
a
);
return
SetValueByPointer
(
root
,
pointer
,
value
,
a
);
}
}
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
Ch
*
value
,
typename
T
::
AllocatorType
&
a
)
{
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
Ch
*
value
,
typename
T
::
AllocatorType
&
a
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Set
(
root
,
value
,
a
);
return
SetValueByPointer
(
root
,
pointer
,
value
,
a
);
}
#if RAPIDJSON_HAS_STDSTRING
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
std
::
basic_string
<
typename
T
::
Ch
>&
value
,
typename
T
::
AllocatorType
&
a
)
{
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Set
(
root
,
value
,
a
);
}
}
#endif
template
<
typename
T
,
typename
CharType
,
size_t
N
,
typename
T2
>
template
<
typename
T
,
typename
CharType
,
size_t
N
,
typename
T2
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
T2
value
,
typename
T
::
AllocatorType
&
a
)
{
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
T2
value
,
typename
T
::
AllocatorType
&
a
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Set
(
root
,
value
,
a
);
return
SetValueByPointer
(
root
,
pointer
,
value
,
a
);
}
}
// No allocator parameter
// No allocator parameter
...
@@ -830,6 +848,13 @@ typename T::ValueType& SetValueByPointer(T& root, const GenericPointer<typename
...
@@ -830,6 +848,13 @@ typename T::ValueType& SetValueByPointer(T& root, const GenericPointer<typename
return
pointer
.
Set
(
root
,
value
);
return
pointer
.
Set
(
root
,
value
);
}
}
#if RAPIDJSON_HAS_STDSTRING
template
<
typename
T
>
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
const
std
::
basic_string
<
typename
T
::
Ch
>&
value
)
{
return
pointer
.
Set
(
root
,
value
);
}
#endif
template
<
typename
T
,
typename
T2
>
template
<
typename
T
,
typename
T2
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
SetValueByPointer
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
T2
value
)
{
SetValueByPointer
(
T
&
root
,
const
GenericPointer
<
typename
T
::
ValueType
>&
pointer
,
T2
value
)
{
...
@@ -838,27 +863,30 @@ SetValueByPointer(T& root, const GenericPointer<typename T::ValueType>& pointer,
...
@@ -838,27 +863,30 @@ SetValueByPointer(T& root, const GenericPointer<typename T::ValueType>& pointer,
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
typename
T
::
ValueType
&
value
)
{
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
typename
T
::
ValueType
&
value
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Set
(
root
,
value
);
return
SetValueByPointer
(
root
,
pointer
,
value
);
}
}
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
GenericStringRef
<
typename
T
::
Ch
>
value
)
{
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
GenericStringRef
<
typename
T
::
Ch
>
value
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Set
(
root
,
value
);
return
SetValueByPointer
(
root
,
pointer
,
value
);
}
}
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
Ch
*
value
)
{
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
typename
T
::
Ch
*
value
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Set
(
root
,
value
);
return
SetValueByPointer
(
root
,
pointer
,
value
);
}
#if RAPIDJSON_HAS_STDSTRING
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
const
std
::
basic_string
<
typename
T
::
Ch
>&
value
)
{
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Set
(
root
,
value
);
}
}
#endif
template
<
typename
T
,
typename
CharType
,
size_t
N
,
typename
T2
>
template
<
typename
T
,
typename
CharType
,
size_t
N
,
typename
T2
>
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
RAPIDJSON_DISABLEIF_RETURN
((
internal
::
OrExpr
<
internal
::
IsPointer
<
T2
>
,
internal
::
IsGenericValue
<
T2
>
>
),
(
typename
T
::
ValueType
&
))
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
T2
value
)
{
SetValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
T2
value
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Set
(
root
,
value
);
return
SetValueByPointer
(
root
,
pointer
,
value
);
}
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
...
@@ -870,8 +898,7 @@ typename T::ValueType& SwapValueByPointer(T& root, const GenericPointer<typename
...
@@ -870,8 +898,7 @@ typename T::ValueType& SwapValueByPointer(T& root, const GenericPointer<typename
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
SwapValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
typename
T
::
ValueType
&
value
,
typename
T
::
AllocatorType
&
a
)
{
typename
T
::
ValueType
&
SwapValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
typename
T
::
ValueType
&
value
,
typename
T
::
AllocatorType
&
a
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Swap
(
root
,
value
,
a
);
return
SwapValueByPointer
(
root
,
pointer
,
value
,
a
);
}
}
template
<
typename
T
>
template
<
typename
T
>
...
@@ -881,8 +908,7 @@ typename T::ValueType& SwapValueByPointer(T& root, const GenericPointer<typename
...
@@ -881,8 +908,7 @@ typename T::ValueType& SwapValueByPointer(T& root, const GenericPointer<typename
template
<
typename
T
,
typename
CharType
,
size_t
N
>
template
<
typename
T
,
typename
CharType
,
size_t
N
>
typename
T
::
ValueType
&
SwapValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
typename
T
::
ValueType
&
value
)
{
typename
T
::
ValueType
&
SwapValueByPointer
(
T
&
root
,
const
CharType
(
&
source
)[
N
],
typename
T
::
ValueType
&
value
)
{
const
GenericPointer
<
typename
T
::
ValueType
>
pointer
(
source
,
N
-
1
);
return
GenericPointer
<
typename
T
::
ValueType
>
(
source
,
N
-
1
).
Swap
(
root
,
value
);
return
SwapValueByPointer
(
root
,
pointer
,
value
);
}
}
RAPIDJSON_NAMESPACE_END
RAPIDJSON_NAMESPACE_END
...
...
test/unittest/CMakeLists.txt
View file @
bb0e8289
...
@@ -22,6 +22,8 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
...
@@ -22,6 +22,8 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
add_definitions
(
-D_CRT_SECURE_NO_WARNINGS=1
)
add_definitions
(
-D_CRT_SECURE_NO_WARNINGS=1
)
endif
()
endif
()
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-DRAPIDJSON_HAS_STDSTRING=1"
)
add_library
(
namespacetest STATIC namespacetest.cpp
)
add_library
(
namespacetest STATIC namespacetest.cpp
)
add_executable
(
unittest
${
UNITTEST_SOURCES
}
)
add_executable
(
unittest
${
UNITTEST_SOURCES
}
)
...
...
test/unittest/pointertest.cpp
View file @
bb0e8289
...
@@ -53,6 +53,16 @@ TEST(Pointer, Parse) {
...
@@ -53,6 +53,16 @@ TEST(Pointer, Parse) {
EXPECT_STREQ
(
"foo"
,
p
.
GetTokens
()[
0
].
name
);
EXPECT_STREQ
(
"foo"
,
p
.
GetTokens
()[
0
].
name
);
}
}
#if RAPIDJSON_HAS_STDSTRING
{
Pointer
p
(
std
::
string
(
"/foo"
));
EXPECT_TRUE
(
p
.
IsValid
());
EXPECT_EQ
(
1u
,
p
.
GetTokenCount
());
EXPECT_EQ
(
3u
,
p
.
GetTokens
()[
0
].
length
);
EXPECT_STREQ
(
"foo"
,
p
.
GetTokens
()[
0
].
name
);
}
#endif
{
{
Pointer
p
(
"/foo/0"
);
Pointer
p
(
"/foo/0"
);
EXPECT_TRUE
(
p
.
IsValid
());
EXPECT_TRUE
(
p
.
IsValid
());
...
@@ -611,6 +621,10 @@ TEST(Pointer, GetWithDefault) {
...
@@ -611,6 +621,10 @@ TEST(Pointer, GetWithDefault) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
EXPECT_STREQ
(
"C++"
,
Pointer
(
"/foo/C++"
).
GetWithDefault
(
d
,
std
::
string
(
"C++"
),
a
).
GetString
());
#endif
}
}
TEST
(
Pointer
,
GetWithDefault_NoAllocator
)
{
TEST
(
Pointer
,
GetWithDefault_NoAllocator
)
{
...
@@ -659,6 +673,10 @@ TEST(Pointer, GetWithDefault_NoAllocator) {
...
@@ -659,6 +673,10 @@ TEST(Pointer, GetWithDefault_NoAllocator) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
EXPECT_STREQ
(
"C++"
,
Pointer
(
"/foo/C++"
).
GetWithDefault
(
d
,
std
::
string
(
"C++"
)).
GetString
());
#endif
}
}
TEST
(
Pointer
,
Set
)
{
TEST
(
Pointer
,
Set
)
{
...
@@ -709,6 +727,11 @@ TEST(Pointer, Set) {
...
@@ -709,6 +727,11 @@ TEST(Pointer, Set) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
Pointer
(
"/foo/c++"
).
Set
(
d
,
std
::
string
(
"C++"
),
a
);
EXPECT_STREQ
(
"C++"
,
GetValueByPointer
(
d
,
"/foo/c++"
)
->
GetString
());
#endif
}
}
TEST
(
Pointer
,
Set_NoAllocator
)
{
TEST
(
Pointer
,
Set_NoAllocator
)
{
...
@@ -758,6 +781,11 @@ TEST(Pointer, Set_NoAllocator) {
...
@@ -758,6 +781,11 @@ TEST(Pointer, Set_NoAllocator) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
Pointer
(
"/foo/c++"
).
Set
(
d
,
std
::
string
(
"C++"
));
EXPECT_STREQ
(
"C++"
,
GetValueByPointer
(
d
,
"/foo/c++"
)
->
GetString
());
#endif
}
}
TEST
(
Pointer
,
Swap
)
{
TEST
(
Pointer
,
Swap
)
{
...
@@ -864,6 +892,10 @@ TEST(Pointer, GetValueByPointerWithDefault_Pointer) {
...
@@ -864,6 +892,10 @@ TEST(Pointer, GetValueByPointerWithDefault_Pointer) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
Pointer
(
"/foo/world"
))
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
Pointer
(
"/foo/world"
))
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
EXPECT_STREQ
(
"C++"
,
GetValueByPointerWithDefault
(
d
,
Pointer
(
"/foo/C++"
),
std
::
string
(
"C++"
),
a
).
GetString
());
#endif
}
}
TEST
(
Pointer
,
GetValueByPointerWithDefault_String
)
{
TEST
(
Pointer
,
GetValueByPointerWithDefault_String
)
{
...
@@ -913,6 +945,10 @@ TEST(Pointer, GetValueByPointerWithDefault_String) {
...
@@ -913,6 +945,10 @@ TEST(Pointer, GetValueByPointerWithDefault_String) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
EXPECT_STREQ
(
"C++"
,
GetValueByPointerWithDefault
(
d
,
"/foo/C++"
,
std
::
string
(
"C++"
),
a
).
GetString
());
#endif
}
}
TEST
(
Pointer
,
GetValueByPointerWithDefault_Pointer_NoAllocator
)
{
TEST
(
Pointer
,
GetValueByPointerWithDefault_Pointer_NoAllocator
)
{
...
@@ -961,6 +997,10 @@ TEST(Pointer, GetValueByPointerWithDefault_Pointer_NoAllocator) {
...
@@ -961,6 +997,10 @@ TEST(Pointer, GetValueByPointerWithDefault_Pointer_NoAllocator) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
Pointer
(
"/foo/world"
))
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
Pointer
(
"/foo/world"
))
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
EXPECT_STREQ
(
"C++"
,
GetValueByPointerWithDefault
(
d
,
Pointer
(
"/foo/C++"
),
std
::
string
(
"C++"
)).
GetString
());
#endif
}
}
TEST
(
Pointer
,
GetValueByPointerWithDefault_String_NoAllocator
)
{
TEST
(
Pointer
,
GetValueByPointerWithDefault_String_NoAllocator
)
{
...
@@ -1009,6 +1049,10 @@ TEST(Pointer, GetValueByPointerWithDefault_String_NoAllocator) {
...
@@ -1009,6 +1049,10 @@ TEST(Pointer, GetValueByPointerWithDefault_String_NoAllocator) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
EXPECT_STREQ
(
"C++"
,
GetValueByPointerWithDefault
(
d
,
Pointer
(
"/foo/C++"
),
std
::
string
(
"C++"
)).
GetString
());
#endif
}
}
TEST
(
Pointer
,
SetValueByPointer_Pointer
)
{
TEST
(
Pointer
,
SetValueByPointer_Pointer
)
{
...
@@ -1056,6 +1100,11 @@ TEST(Pointer, SetValueByPointer_Pointer) {
...
@@ -1056,6 +1100,11 @@ TEST(Pointer, SetValueByPointer_Pointer) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
SetValueByPointer
(
d
,
Pointer
(
"/foo/c++"
),
std
::
string
(
"C++"
),
a
);
EXPECT_STREQ
(
"C++"
,
GetValueByPointer
(
d
,
"/foo/c++"
)
->
GetString
());
#endif
}
}
TEST
(
Pointer
,
SetValueByPointer_String
)
{
TEST
(
Pointer
,
SetValueByPointer_String
)
{
...
@@ -1103,6 +1152,11 @@ TEST(Pointer, SetValueByPointer_String) {
...
@@ -1103,6 +1152,11 @@ TEST(Pointer, SetValueByPointer_String) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
SetValueByPointer
(
d
,
"/foo/c++"
,
std
::
string
(
"C++"
),
a
);
EXPECT_STREQ
(
"C++"
,
GetValueByPointer
(
d
,
"/foo/c++"
)
->
GetString
());
#endif
}
}
TEST
(
Pointer
,
SetValueByPointer_Pointer_NoAllocator
)
{
TEST
(
Pointer
,
SetValueByPointer_Pointer_NoAllocator
)
{
...
@@ -1149,6 +1203,11 @@ TEST(Pointer, SetValueByPointer_Pointer_NoAllocator) {
...
@@ -1149,6 +1203,11 @@ TEST(Pointer, SetValueByPointer_Pointer_NoAllocator) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
SetValueByPointer
(
d
,
Pointer
(
"/foo/c++"
),
std
::
string
(
"C++"
));
EXPECT_STREQ
(
"C++"
,
GetValueByPointer
(
d
,
"/foo/c++"
)
->
GetString
());
#endif
}
}
TEST
(
Pointer
,
SetValueByPointer_String_NoAllocator
)
{
TEST
(
Pointer
,
SetValueByPointer_String_NoAllocator
)
{
...
@@ -1195,6 +1254,11 @@ TEST(Pointer, SetValueByPointer_String_NoAllocator) {
...
@@ -1195,6 +1254,11 @@ TEST(Pointer, SetValueByPointer_String_NoAllocator) {
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
}
}
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
EXPECT_STREQ
(
"World"
,
GetValueByPointer
(
d
,
"/foo/world"
)
->
GetString
());
#if RAPIDJSON_HAS_STDSTRING
SetValueByPointer
(
d
,
"/foo/c++"
,
std
::
string
(
"C++"
));
EXPECT_STREQ
(
"C++"
,
GetValueByPointer
(
d
,
"/foo/c++"
)
->
GetString
());
#endif
}
}
TEST
(
Pointer
,
SwapValueByPointer
)
{
TEST
(
Pointer
,
SwapValueByPointer
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment