summaryrefslogtreecommitdiff
path: root/src/mongo/base/owned_pointer_vector.h
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2014-11-12 11:27:07 -0500
committerMathias Stearn <mathias@10gen.com>2014-11-18 14:32:09 -0500
commita6bba2cd699581aa610c636cd25042f2b45c8093 (patch)
tree7b1041da8276c74c4467000bfb2566428154e5d7 /src/mongo/base/owned_pointer_vector.h
parentdebe7c741f6f21587003fc3be4ccda5147b7e27b (diff)
downloadmongo-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.h16
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;
};