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