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

Side by Side Diff: base/scoped_vector.h

Issue 3183019: Mac: Fix leak in tabpose. (Closed)
Patch Set: Created 10 years, 4 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
« no previous file with comments | « no previous file | chrome/browser/cocoa/tabpose_window.mm » ('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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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_SCOPED_VECTOR_H_ 5 #ifndef BASE_SCOPED_VECTOR_H_
6 #define BASE_SCOPED_VECTOR_H_ 6 #define BASE_SCOPED_VECTOR_H_
7 #pragma once 7 #pragma once
8 8
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/stl_util-inl.h" 12 #include "base/stl_util-inl.h"
13 13
14 // ScopedVector wraps a vector deleting the elements from its 14 // ScopedVector wraps a vector deleting the elements from its
15 // destructor. 15 // destructor.
16 template <class T> 16 template <class T>
17 class ScopedVector { 17 class ScopedVector {
18 public: 18 public:
19 typedef typename std::vector<T*>::iterator iterator; 19 typedef typename std::vector<T*>::iterator iterator;
20 typedef typename std::vector<T*>::const_iterator const_iterator; 20 typedef typename std::vector<T*>::const_iterator const_iterator;
21 typedef typename std::vector<T*>::reverse_iterator reverse_iterator; 21 typedef typename std::vector<T*>::reverse_iterator reverse_iterator;
22 typedef typename std::vector<T*>::const_reverse_iterator 22 typedef typename std::vector<T*>::const_reverse_iterator
23 const_reverse_iterator; 23 const_reverse_iterator;
24 24
25 ScopedVector() {} 25 ScopedVector() {}
26 ~ScopedVector() { reset(); } 26 ~ScopedVector() { reset(); }
27 27
28 std::vector<T*>* operator->() { return &v; } 28 std::vector<T*>* operator->() { return &v; }
29 const std::vector<T*>* operator->() const { return &v; } 29 const std::vector<T*>* operator->() const { return &v; }
30 T* operator[](size_t i) { return v[i]; } 30 T*& operator[](size_t i) { return v[i]; }
viettrungluu 2010/08/19 18:57:44 Wow, that was broken before.
31 const T* operator[](size_t i) const { return v[i]; } 31 const T* operator[](size_t i) const { return v[i]; }
32 32
33 bool empty() const { return v.empty(); } 33 bool empty() const { return v.empty(); }
34 size_t size() const { return v.size(); } 34 size_t size() const { return v.size(); }
35 35
36 reverse_iterator rbegin() { return v.rbegin(); } 36 reverse_iterator rbegin() { return v.rbegin(); }
37 const_reverse_iterator rbegin() const { return v.rbegin(); } 37 const_reverse_iterator rbegin() const { return v.rbegin(); }
38 reverse_iterator rend() { return v.rend(); } 38 reverse_iterator rend() { return v.rend(); }
39 const_reverse_iterator rend() const { return v.rend(); } 39 const_reverse_iterator rend() const { return v.rend(); }
40 40
41 iterator begin() { return v.begin(); } 41 iterator begin() { return v.begin(); }
42 const_iterator begin() const { return v.begin(); } 42 const_iterator begin() const { return v.begin(); }
43 iterator end() { return v.end(); } 43 iterator end() { return v.end(); }
44 const_iterator end() const { return v.end(); } 44 const_iterator end() const { return v.end(); }
45 45
46 void push_back(T* elem) { v.push_back(elem); } 46 void push_back(T* elem) { v.push_back(elem); }
47 47
48 std::vector<T*>& get() { return v; } 48 std::vector<T*>& get() { return v; }
49 const std::vector<T*>& get() const { return v; } 49 const std::vector<T*>& get() const { return v; }
50 void swap(ScopedVector<T>& other) { v.swap(other.v); } 50 void swap(ScopedVector<T>& other) { v.swap(other.v); }
51 void release(std::vector<T*>* out) { 51 void release(std::vector<T*>* out) {
52 out->swap(v); 52 out->swap(v);
53 v.clear(); 53 v.clear();
54 } 54 }
55 55
56 void reset() { STLDeleteElements(&v); } 56 void reset() { STLDeleteElements(&v); }
57 void resize(size_t new_size) { v.resize(new_size); }
57 58
58 private: 59 private:
59 std::vector<T*> v; 60 std::vector<T*> v;
60 61
61 DISALLOW_COPY_AND_ASSIGN(ScopedVector); 62 DISALLOW_COPY_AND_ASSIGN(ScopedVector);
62 }; 63 };
63 64
64 #endif // BASE_SCOPED_VECTOR_H_ 65 #endif // BASE_SCOPED_VECTOR_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/cocoa/tabpose_window.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698