From 9ab2621e855a9abb8377520b42d6dfddcd49a8e1 Mon Sep 17 00:00:00 2001 From: miloyip Date: Thu, 31 Jul 2014 18:53:17 +0800 Subject: [PATCH] Add Erase(ConstValueIterator) and Erase(ConstValueIterator,ConstValueIterator) As std::vector::erase() overloads added in C++11 --- include/rapidjson/document.h | 8 ++++++++ test/unittest/valuetest.cpp | 10 +++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/include/rapidjson/document.h b/include/rapidjson/document.h index 16167ff..6a0e1a0 100644 --- a/include/rapidjson/document.h +++ b/include/rapidjson/document.h @@ -1008,6 +1008,10 @@ int z = a[0u].GetInt(); // This works too. return Erase(pos, pos + 1); } + ValueIterator Erase(ConstValueIterator pos) { + return Erase(const_cast(pos)); + } + //! Remove elements in the range [first, last) of the array. /*! \param pos iterator to the element to remove @@ -1029,6 +1033,10 @@ int z = a[0u].GetInt(); // This works too. return first; } + ValueIterator Erase(ConstValueIterator first, ConstValueIterator last) { + return Erase(const_cast(first), const_cast(last)); + } + //@} //!@name Number diff --git a/test/unittest/valuetest.cpp b/test/unittest/valuetest.cpp index 3bd0afc..46f9a59 100644 --- a/test/unittest/valuetest.cpp +++ b/test/unittest/valuetest.cpp @@ -628,11 +628,11 @@ TEST(Value, Array) { x.PushBack(Value(kArrayType).PushBack(i, allocator).Move(), allocator); // Erase the first - itr = x.Erase(x.Begin()); - EXPECT_EQ(x.Begin(), itr); - EXPECT_EQ(9u, x.Size()); + itr = x.Erase(y.Begin()); // const iteator is also OK + EXPECT_EQ(y.Begin(), itr); + EXPECT_EQ(9u, y.Size()); for (int i = 0; i < 9; i++) - EXPECT_EQ(i + 1, x[i][0u].GetInt()); + EXPECT_EQ(i + 1, y[i][0u].GetInt()); // Ease the last itr = x.Erase(x.End() - 1); @@ -659,7 +659,7 @@ TEST(Value, Array) { for (unsigned i = 0; i < n; i++) x.PushBack(Value(kArrayType).PushBack(i, allocator).Move(), allocator); - itr = x.Erase(x.Begin() + first, x.Begin() + last); + itr = x.Erase(y.Begin() + first, y.Begin() + last); // const iterator is also OK if (last == n) EXPECT_EQ(x.End(), itr); else