diff options
author | Mathias Stearn <mathias@10gen.com> | 2014-11-12 11:27:07 -0500 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2014-11-18 14:32:09 -0500 |
commit | a6bba2cd699581aa610c636cd25042f2b45c8093 (patch) | |
tree | 7b1041da8276c74c4467000bfb2566428154e5d7 /src/mongo/base/owned_pointer_vector.h | |
parent | debe7c741f6f21587003fc3be4ccda5147b7e27b (diff) | |
download | mongo-a6bba2cd699581aa610c636cd25042f2b45c8093.tar.gz |
Use OwnedPointerVector to track Changes
Saves one new/delete pair per change registration.
Diffstat (limited to 'src/mongo/base/owned_pointer_vector.h')
-rw-r--r-- | src/mongo/base/owned_pointer_vector.h | 16 |
1 files changed, 14 insertions, 2 deletions
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<T*>::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<T*> _vector; }; |