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 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 24 matching lines...) Expand all Loading... |
35 | 35 |
36 ScopedVector() {} | 36 ScopedVector() {} |
37 ~ScopedVector() { reset(); } | 37 ~ScopedVector() { reset(); } |
38 ScopedVector(RValue& other) { swap(other); } | 38 ScopedVector(RValue& other) { swap(other); } |
39 | 39 |
40 ScopedVector& operator=(RValue& rhs) { | 40 ScopedVector& operator=(RValue& rhs) { |
41 swap(rhs); | 41 swap(rhs); |
42 return *this; | 42 return *this; |
43 } | 43 } |
44 | 44 |
45 std::vector<T*>* operator->() { return &v; } | |
46 const std::vector<T*>* operator->() const { return &v; } | |
47 T*& operator[](size_t i) { return v[i]; } | 45 T*& operator[](size_t i) { return v[i]; } |
48 const T* operator[](size_t i) const { return v[i]; } | 46 const T* operator[](size_t i) const { return v[i]; } |
49 | 47 |
50 bool empty() const { return v.empty(); } | 48 bool empty() const { return v.empty(); } |
51 size_t size() const { return v.size(); } | 49 size_t size() const { return v.size(); } |
52 | 50 |
53 reverse_iterator rbegin() { return v.rbegin(); } | 51 reverse_iterator rbegin() { return v.rbegin(); } |
54 const_reverse_iterator rbegin() const { return v.rbegin(); } | 52 const_reverse_iterator rbegin() const { return v.rbegin(); } |
55 reverse_iterator rend() { return v.rend(); } | 53 reverse_iterator rend() { return v.rend(); } |
56 const_reverse_iterator rend() const { return v.rend(); } | 54 const_reverse_iterator rend() const { return v.rend(); } |
57 | 55 |
58 iterator begin() { return v.begin(); } | 56 iterator begin() { return v.begin(); } |
59 const_iterator begin() const { return v.begin(); } | 57 const_iterator begin() const { return v.begin(); } |
60 iterator end() { return v.end(); } | 58 iterator end() { return v.end(); } |
61 const_iterator end() const { return v.end(); } | 59 const_iterator end() const { return v.end(); } |
62 | 60 |
63 const_reference front() const { return v.front(); } | 61 const_reference front() const { return v.front(); } |
64 reference front() { return v.front(); } | 62 reference front() { return v.front(); } |
65 const_reference back() const { return v.back(); } | 63 const_reference back() const { return v.back(); } |
66 reference back() { return v.back(); } | 64 reference back() { return v.back(); } |
67 | 65 |
68 void push_back(T* elem) { v.push_back(elem); } | 66 void push_back(T* elem) { v.push_back(elem); } |
69 | 67 |
70 std::vector<T*>& get() { return v; } | 68 std::vector<T*>& get() { return v; } |
71 const std::vector<T*>& get() const { return v; } | 69 const std::vector<T*>& get() const { return v; } |
| 70 void swap(std::vector<T*>& other) { v.swap(other); } |
72 void swap(ScopedVector<T>& other) { v.swap(other.v); } | 71 void swap(ScopedVector<T>& other) { v.swap(other.v); } |
73 void release(std::vector<T*>* out) { | 72 void release(std::vector<T*>* out) { |
74 out->swap(v); | 73 out->swap(v); |
75 v.clear(); | 74 v.clear(); |
76 } | 75 } |
77 | 76 |
78 void reset() { STLDeleteElements(&v); } | 77 void reset() { STLDeleteElements(&v); } |
79 void reserve(size_t capacity) { v.reserve(capacity); } | 78 void reserve(size_t capacity) { v.reserve(capacity); } |
80 void resize(size_t new_size) { v.resize(new_size); } | 79 void resize(size_t new_size) { v.resize(new_size); } |
81 | 80 |
| 81 template<typename InputIterator> |
| 82 void assign(InputIterator begin, InputIterator end) { |
| 83 v.assign(begin, end); |
| 84 } |
| 85 |
| 86 void clear() { v.clear(); } |
| 87 |
82 // Lets the ScopedVector take ownership of |x|. | 88 // Lets the ScopedVector take ownership of |x|. |
83 iterator insert(iterator position, T* x) { | 89 iterator insert(iterator position, T* x) { |
84 return v.insert(position, x); | 90 return v.insert(position, x); |
85 } | 91 } |
86 | 92 |
87 // Lets the ScopedVector take ownership of elements in [first,last). | 93 // Lets the ScopedVector take ownership of elements in [first,last). |
88 template<typename InputIterator> | 94 template<typename InputIterator> |
89 void insert(iterator position, InputIterator first, InputIterator last) { | 95 void insert(iterator position, InputIterator first, InputIterator last) { |
90 v.insert(position, first, last); | 96 v.insert(position, first, last); |
91 } | 97 } |
(...skipping 10 matching lines...) Expand all Loading... |
102 | 108 |
103 // Like |erase()|, but doesn't delete the element at |position|. | 109 // Like |erase()|, but doesn't delete the element at |position|. |
104 iterator weak_erase(iterator position) { | 110 iterator weak_erase(iterator position) { |
105 return v.erase(position); | 111 return v.erase(position); |
106 } | 112 } |
107 | 113 |
108 // Like |erase()|, but doesn't delete the elements in [first, last). | 114 // Like |erase()|, but doesn't delete the elements in [first, last). |
109 iterator weak_erase(iterator first, iterator last) { | 115 iterator weak_erase(iterator first, iterator last) { |
110 return v.erase(first, last); | 116 return v.erase(first, last); |
111 } | 117 } |
| 118 |
112 private: | 119 private: |
113 std::vector<T*> v; | 120 std::vector<T*> v; |
114 }; | 121 }; |
115 | 122 |
116 #endif // BASE_MEMORY_SCOPED_VECTOR_H_ | 123 #endif // BASE_MEMORY_SCOPED_VECTOR_H_ |
OLD | NEW |