Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef BASE_MEMORY_SCOPED_VECTOR_H_ | 5 #ifndef BASE_MEMORY_SCOPED_VECTOR_H_ |
| 6 #define BASE_MEMORY_SCOPED_VECTOR_H_ | 6 #define BASE_MEMORY_SCOPED_VECTOR_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 81 void swap(ScopedVector<T>& other) { v_.swap(other.v_); } | 81 void swap(ScopedVector<T>& other) { v_.swap(other.v_); } |
| 82 void release(std::vector<T*>* out) { | 82 void release(std::vector<T*>* out) { |
| 83 out->swap(v_); | 83 out->swap(v_); |
| 84 v_.clear(); | 84 v_.clear(); |
| 85 } | 85 } |
| 86 | 86 |
| 87 void reserve(size_t capacity) { v_.reserve(capacity); } | 87 void reserve(size_t capacity) { v_.reserve(capacity); } |
| 88 | 88 |
| 89 // Resize, deleting elements in the disappearing range if we are shrinking. | 89 // Resize, deleting elements in the disappearing range if we are shrinking. |
| 90 void resize(size_t new_size) { | 90 void resize(size_t new_size) { |
| 91 if (v_.size() > new_size) | 91 if (v_.size() > new_size) { |
| 92 base::STLDeleteContainerPointers(v_.begin() + new_size, v_.end()); | 92 auto it = v_.begin() + new_size; |
| 93 auto end = v_.end(); | |
| 94 while (it != end) { | |
| 95 delete *it; | |
| 96 ++it; | |
|
Nico
2016/09/08 17:32:00
how is this better than the old thing?
Avi (use Gerrit)
2016/09/13 14:36:13
I'm trying to remove STLDeleteContainerPointers, a
| |
| 97 } | |
| 98 } | |
| 93 v_.resize(new_size); | 99 v_.resize(new_size); |
| 94 } | 100 } |
| 95 | 101 |
| 96 template<typename InputIterator> | 102 template<typename InputIterator> |
| 97 void assign(InputIterator begin, InputIterator end) { | 103 void assign(InputIterator begin, InputIterator end) { |
| 98 v_.assign(begin, end); | 104 v_.assign(begin, end); |
| 99 } | 105 } |
| 100 | 106 |
| 101 void clear() { base::STLDeleteElements(&v_); } | 107 void clear() { base::STLDeleteElements(&v_); } |
| 102 | 108 |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 117 void insert(iterator position, InputIterator first, InputIterator last) { | 123 void insert(iterator position, InputIterator first, InputIterator last) { |
| 118 v_.insert(position, first, last); | 124 v_.insert(position, first, last); |
| 119 } | 125 } |
| 120 | 126 |
| 121 iterator erase(iterator position) { | 127 iterator erase(iterator position) { |
| 122 delete *position; | 128 delete *position; |
| 123 return v_.erase(position); | 129 return v_.erase(position); |
| 124 } | 130 } |
| 125 | 131 |
| 126 iterator erase(iterator first, iterator last) { | 132 iterator erase(iterator first, iterator last) { |
| 127 base::STLDeleteContainerPointers(first, last); | 133 auto it = first; |
| 134 while (it != last) { | |
| 135 delete *it; | |
| 136 ++it; | |
| 137 } | |
| 128 return v_.erase(first, last); | 138 return v_.erase(first, last); |
| 129 } | 139 } |
| 130 | 140 |
| 131 // Like |erase()|, but doesn't delete the element at |position|. | 141 // Like |erase()|, but doesn't delete the element at |position|. |
| 132 iterator weak_erase(iterator position) { | 142 iterator weak_erase(iterator position) { |
| 133 return v_.erase(position); | 143 return v_.erase(position); |
| 134 } | 144 } |
| 135 | 145 |
| 136 // Like |erase()|, but doesn't delete the elements in [first, last). | 146 // Like |erase()|, but doesn't delete the elements in [first, last). |
| 137 iterator weak_erase(iterator first, iterator last) { | 147 iterator weak_erase(iterator first, iterator last) { |
| 138 return v_.erase(first, last); | 148 return v_.erase(first, last); |
| 139 } | 149 } |
| 140 | 150 |
| 141 private: | 151 private: |
| 142 std::vector<T*> v_; | 152 std::vector<T*> v_; |
| 143 | 153 |
| 144 DISALLOW_COPY_AND_ASSIGN(ScopedVector); | 154 DISALLOW_COPY_AND_ASSIGN(ScopedVector); |
| 145 }; | 155 }; |
| 146 | 156 |
| 147 #endif // BASE_MEMORY_SCOPED_VECTOR_H_ | 157 #endif // BASE_MEMORY_SCOPED_VECTOR_H_ |
| OLD | NEW |