From 771fa9879a8c290e34a53bb8e9374119f76e4d2d Mon Sep 17 00:00:00 2001 From: miloyip Date: Fri, 8 May 2015 22:18:46 +0800 Subject: [PATCH] Add Pointer::Append(Value, Allocator) overload --- include/rapidjson/pointer.h | 15 +++++++++++++++ test/unittest/pointertest.cpp | 16 +++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/include/rapidjson/pointer.h b/include/rapidjson/pointer.h index adb819e..a8d0094 100644 --- a/include/rapidjson/pointer.h +++ b/include/rapidjson/pointer.h @@ -273,6 +273,21 @@ public: } } + //! Append a token by value, and return a new Pointer + /*! + \param value Value (either Uint or String) to be appended. + \param allocator Allocator for the newly return Pointer. + \return A new Pointer with appended token. + */ + GenericPointer Append(const ValueType& token, Allocator* allocator = 0) const { + if (token.IsString()) + return Append(token.GetString(), token.GetStringLength(), allocator); + else { + RAPIDJSON_ASSERT(token.IsUint64()); + return Append(static_cast(token.GetUint64()), allocator); + } + } + //!@name Handling Parse Error //@{ diff --git a/test/unittest/pointertest.cpp b/test/unittest/pointertest.cpp index cb36330..0e050c0 100644 --- a/test/unittest/pointertest.cpp +++ b/test/unittest/pointertest.cpp @@ -523,10 +523,20 @@ TEST(Pointer, Append) { Pointer p; Pointer q = p.Append("foo"); EXPECT_TRUE(Pointer("/foo") == q); - q = q.Append(0); - EXPECT_TRUE(Pointer("/foo/0") == q); + q = q.Append(1234); + EXPECT_TRUE(Pointer("/foo/1234") == q); q = q.Append(""); - EXPECT_TRUE(Pointer("/foo/0/") == q); + EXPECT_TRUE(Pointer("/foo/1234/") == q); + } + + { + Pointer p; + Pointer q = p.Append(Value("foo").Move()); + EXPECT_TRUE(Pointer("/foo") == q); + q = q.Append(Value(1234).Move()); + EXPECT_TRUE(Pointer("/foo/1234") == q); + q = q.Append(Value(kStringType).Move()); + EXPECT_TRUE(Pointer("/foo/1234/") == q); } #if RAPIDJSON_HAS_STDSTRING