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 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 STLDeleteContainerPointers(v_.begin() + new_size, v_.end()); | 92 base::STLDeleteContainerPointers(v_.begin() + new_size, v_.end()); |
93 v_.resize(new_size); | 93 v_.resize(new_size); |
94 } | 94 } |
95 | 95 |
96 template<typename InputIterator> | 96 template<typename InputIterator> |
97 void assign(InputIterator begin, InputIterator end) { | 97 void assign(InputIterator begin, InputIterator end) { |
98 v_.assign(begin, end); | 98 v_.assign(begin, end); |
99 } | 99 } |
100 | 100 |
101 void clear() { STLDeleteElements(&v_); } | 101 void clear() { base::STLDeleteElements(&v_); } |
102 | 102 |
103 // Like |clear()|, but doesn't delete any elements. | 103 // Like |clear()|, but doesn't delete any elements. |
104 void weak_clear() { v_.clear(); } | 104 void weak_clear() { v_.clear(); } |
105 | 105 |
106 // Lets the ScopedVector take ownership of |x|. | 106 // Lets the ScopedVector take ownership of |x|. |
107 iterator insert(iterator position, T* x) { | 107 iterator insert(iterator position, T* x) { |
108 return v_.insert(position, x); | 108 return v_.insert(position, x); |
109 } | 109 } |
110 | 110 |
111 iterator insert(iterator position, std::unique_ptr<T> x) { | 111 iterator insert(iterator position, std::unique_ptr<T> x) { |
112 return v_.insert(position, x.release()); | 112 return v_.insert(position, x.release()); |
113 } | 113 } |
114 | 114 |
115 // Lets the ScopedVector take ownership of elements in [first,last). | 115 // Lets the ScopedVector take ownership of elements in [first,last). |
116 template<typename InputIterator> | 116 template<typename InputIterator> |
117 void insert(iterator position, InputIterator first, InputIterator last) { | 117 void insert(iterator position, InputIterator first, InputIterator last) { |
118 v_.insert(position, first, last); | 118 v_.insert(position, first, last); |
119 } | 119 } |
120 | 120 |
121 iterator erase(iterator position) { | 121 iterator erase(iterator position) { |
122 delete *position; | 122 delete *position; |
123 return v_.erase(position); | 123 return v_.erase(position); |
124 } | 124 } |
125 | 125 |
126 iterator erase(iterator first, iterator last) { | 126 iterator erase(iterator first, iterator last) { |
127 STLDeleteContainerPointers(first, last); | 127 base::STLDeleteContainerPointers(first, last); |
128 return v_.erase(first, last); | 128 return v_.erase(first, last); |
129 } | 129 } |
130 | 130 |
131 // Like |erase()|, but doesn't delete the element at |position|. | 131 // Like |erase()|, but doesn't delete the element at |position|. |
132 iterator weak_erase(iterator position) { | 132 iterator weak_erase(iterator position) { |
133 return v_.erase(position); | 133 return v_.erase(position); |
134 } | 134 } |
135 | 135 |
136 // Like |erase()|, but doesn't delete the elements in [first, last). | 136 // Like |erase()|, but doesn't delete the elements in [first, last). |
137 iterator weak_erase(iterator first, iterator last) { | 137 iterator weak_erase(iterator first, iterator last) { |
138 return v_.erase(first, last); | 138 return v_.erase(first, last); |
139 } | 139 } |
140 | 140 |
141 private: | 141 private: |
142 std::vector<T*> v_; | 142 std::vector<T*> v_; |
143 | 143 |
144 DISALLOW_COPY_AND_ASSIGN(ScopedVector); | 144 DISALLOW_COPY_AND_ASSIGN(ScopedVector); |
145 }; | 145 }; |
146 | 146 |
147 #endif // BASE_MEMORY_SCOPED_VECTOR_H_ | 147 #endif // BASE_MEMORY_SCOPED_VECTOR_H_ |
OLD | NEW |