GenericValue: add Erase function for object members
This commit is contained in:
parent
c0fcdcc478
commit
96af95c945
@ -850,6 +850,7 @@ public:
|
|||||||
/*! \param m member iterator (obtained by FindMember() or MemberBegin()).
|
/*! \param m member iterator (obtained by FindMember() or MemberBegin()).
|
||||||
\return the new iterator after removal.
|
\return the new iterator after removal.
|
||||||
\note Removing member is implemented by moving the last member. So the ordering of members is changed.
|
\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) {
|
MemberIterator RemoveMember(MemberIterator m) {
|
||||||
RAPIDJSON_ASSERT(IsObject());
|
RAPIDJSON_ASSERT(IsObject());
|
||||||
@ -870,6 +871,40 @@ public:
|
|||||||
return m;
|
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
|
//!@name Array
|
||||||
|
Loading…
x
Reference in New Issue
Block a user