From a6bba2cd699581aa610c636cd25042f2b45c8093 Mon Sep 17 00:00:00 2001 From: Mathias Stearn Date: Wed, 12 Nov 2014 11:27:07 -0500 Subject: Use OwnedPointerVector to track Changes Saves one new/delete pair per change registration. --- src/mongo/base/owned_pointer_vector.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/mongo/base/owned_pointer_vector.h') diff --git a/src/mongo/base/owned_pointer_vector.h b/src/mongo/base/owned_pointer_vector.h index 754e702941e..fb5ddc09554 100644 --- a/src/mongo/base/owned_pointer_vector.h +++ b/src/mongo/base/owned_pointer_vector.h @@ -94,8 +94,14 @@ namespace mongo { */ void erase(const_iterator it) { delete *it; - // vector::erase(const_iterator) is new in c++11, so converting to non-const iterator. - _vector.erase(_vector.begin() + (it - begin())); + _vector.erase(toNonConstIter(it)); + } + + void erase(const_iterator begin, const_iterator end) { + for (const_iterator it = begin; it != end; ++it) { + delete *it; + } + _vector.erase(toNonConstIter(begin), toNonConstIter(end)); } // @@ -136,6 +142,12 @@ namespace mongo { } private: + typename std::vector::iterator toNonConstIter(const_iterator it) { + // This is needed for a few cases where c++03 vectors require non-const iterators that + // were relaxed in c++11 to allow const_iterators. It can go away when we require c++11. + return _vector.begin() + (it - begin()); + } + std::vector _vector; }; -- cgit v1.2.1