Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(644)

Side by Side Diff: base/memory/scoped_vector.h

Issue 9207021: Transfer the C++03 move-only type emulation into base/move.h and also make ScopedVector move-only. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix comments Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/memory/scoped_ptr.h ('k') | base/memory/scoped_vector_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/move.h"
12 #include "base/stl_util.h" 13 #include "base/stl_util.h"
13 14
14 // ScopedVector wraps a vector deleting the elements from its 15 // ScopedVector wraps a vector deleting the elements from its
15 // destructor. 16 // destructor.
16 template <class T> 17 template <class T>
17 class ScopedVector { 18 class ScopedVector {
19 MOVE_ONLY_TYPE_FOR_CPP_03(ScopedVector, RValue);
20
18 public: 21 public:
19 typedef typename std::vector<T*>::iterator iterator; 22 typedef typename std::vector<T*>::iterator iterator;
20 typedef typename std::vector<T*>::const_iterator const_iterator; 23 typedef typename std::vector<T*>::const_iterator const_iterator;
21 typedef typename std::vector<T*>::reverse_iterator reverse_iterator; 24 typedef typename std::vector<T*>::reverse_iterator reverse_iterator;
22 typedef typename std::vector<T*>::const_reverse_iterator 25 typedef typename std::vector<T*>::const_reverse_iterator
23 const_reverse_iterator; 26 const_reverse_iterator;
24 27
25 ScopedVector() {} 28 ScopedVector() {}
26 ~ScopedVector() { reset(); } 29 ~ScopedVector() { reset(); }
30 ScopedVector(RValue& other) { swap(other); }
31
32 ScopedVector& operator=(RValue& rhs) {
33 swap(rhs);
34 return *this;
35 }
27 36
28 std::vector<T*>* operator->() { return &v; } 37 std::vector<T*>* operator->() { return &v; }
29 const std::vector<T*>* operator->() const { return &v; } 38 const std::vector<T*>* operator->() const { return &v; }
30 T*& operator[](size_t i) { return v[i]; } 39 T*& operator[](size_t i) { return v[i]; }
31 const T* operator[](size_t i) const { return v[i]; } 40 const T* operator[](size_t i) const { return v[i]; }
32 41
33 bool empty() const { return v.empty(); } 42 bool empty() const { return v.empty(); }
34 size_t size() const { return v.size(); } 43 size_t size() const { return v.size(); }
35 44
36 reverse_iterator rbegin() { return v.rbegin(); } 45 reverse_iterator rbegin() { return v.rbegin(); }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 iterator weak_erase(iterator position) { 91 iterator weak_erase(iterator position) {
83 return v.erase(position); 92 return v.erase(position);
84 } 93 }
85 94
86 // Like |erase()|, but doesn't delete the elements in [first, last). 95 // Like |erase()|, but doesn't delete the elements in [first, last).
87 iterator weak_erase(iterator first, iterator last) { 96 iterator weak_erase(iterator first, iterator last) {
88 return v.erase(first, last); 97 return v.erase(first, last);
89 } 98 }
90 private: 99 private:
91 std::vector<T*> v; 100 std::vector<T*> v;
92
93 DISALLOW_COPY_AND_ASSIGN(ScopedVector);
94 }; 101 };
95 102
96 #endif // BASE_MEMORY_SCOPED_VECTOR_H_ 103 #endif // BASE_MEMORY_SCOPED_VECTOR_H_
OLDNEW
« no previous file with comments | « base/memory/scoped_ptr.h ('k') | base/memory/scoped_vector_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698