Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/miloyip/rapidjson.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp A. Hartmann <pah@qo.cx>2014-07-31 14:47:02 +0400
committerPhilipp A. Hartmann <pah@qo.cx>2014-07-31 15:03:32 +0400
commit96af95c945970d935e5f9fdd57e6ece5d071e880 (patch)
tree87176fad9157aac8e3faa63a135a9f748ee840e8 /include
parentc0fcdcc478664ffcb21bd76c4f0e55a06468d8c5 (diff)
GenericValue: add Erase function for object members
Diffstat (limited to 'include')
-rw-r--r--include/rapidjson/document.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/include/rapidjson/document.h b/include/rapidjson/document.h
index a52d9865..e7413ebe 100644
--- a/include/rapidjson/document.h
+++ b/include/rapidjson/document.h
@@ -850,6 +850,7 @@ public:
/*! \param m member iterator (obtained by FindMember() or MemberBegin()).
\return the new iterator after removal.
\note Removing member is implemented by moving the last member. So the ordering of members is changed.
+ \note Use \ref Erase(ConstMemberIterator) instead, if you need to rely on a stable member ordering.
*/
MemberIterator RemoveMember(MemberIterator m) {
RAPIDJSON_ASSERT(IsObject());
@@ -870,6 +871,40 @@ public:
return m;
}
+ //! Remove a member from an object by iterator.
+ /*! \param pos iterator to the member to remove
+ \pre IsObject() == true && \ref MemberBegin() <= \c pos < \ref MemberEnd()
+ \return Iterator following the removed element.
+ If the iterator \c pos refers to the last element, the \ref MemberEnd() iterator is returned.
+ \note Other than \ref RemoveMember(MemberIterator), this function preserves the ordering of the members.
+ */
+ MemberIterator Erase(ConstMemberIterator pos) {
+ return Erase(pos, pos +1);
+ }
+
+ //! Remove members in the range [first, last) from an object.
+ /*! \param first iterator to the first member to remove
+ \param last iterator following the last member to remove
+ \pre IsObject() == true && \ref MemberBegin() <= \c first <= \c last <= \ref MemberEnd()
+ \return Iterator following the last removed element.
+ \note Other than \ref RemoveMember(MemberIterator), this function preserves the ordering of the members.
+ */
+ MemberIterator Erase(ConstMemberIterator first, ConstMemberIterator last) {
+ RAPIDJSON_ASSERT(IsObject());
+ RAPIDJSON_ASSERT(data_.o.size > 0);
+ RAPIDJSON_ASSERT(data_.o.members != 0);
+ RAPIDJSON_ASSERT(first >= MemberBegin());
+ RAPIDJSON_ASSERT(first <= last);
+ RAPIDJSON_ASSERT(last <= MemberEnd());
+
+ MemberIterator pos = MemberBegin() + (first - MemberBegin());
+ for (MemberIterator itr = pos; ConstMemberIterator(itr) != last; ++itr)
+ itr->~Member();
+ memmove(&*pos, &*last, (ConstMemberIterator(MemberEnd()) - last) * sizeof(Member));
+ data_.o.size -= (last - first);
+ return pos;
+ }
+
//@}
//!@name Array