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

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

Issue 8247009: Explicit animation support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 2 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef BASE_MEMORY_SCOPED_DEQUE_H_
6 #define BASE_MEMORY_SCOPED_DEQUE_H_
7 #pragma once
8
9 #include <deque>
10
11 #include "base/basictypes.h"
12 #include "base/stl_util.h"
13
14 // ScopedDeque wraps a deque deleting the elements from its destructor
15 template <class T>
16 class ScopedDeque {
17 public:
18 typedef typename std::deque<T*>::iterator iterator;
19 typedef typename std::deque<T*>::const_iterator const_iterator;
20 typedef typename std::deque<T*>::reverse_iterator reverse_iterator;
21 typedef typename std::deque<T*>::const_reverse_iterator
22 const_reverse_iterator;
23
24 ScopedDeque() {}
25 ~ScopedDeque() { clear(); }
26
27 std::deque<T*>* operator->() { return &d; }
28 const std::deque<T*>* operator->() const { return &d; }
29 T*& operator[](size_t i) { return d[i]; }
30 const T* operator[](size_t i) const { return d[i]; }
31
32 bool empty() const { return d.empty(); }
33 size_t size() const { return d.size(); }
34
35 reverse_iterator rbegin() { return d.rbegin(); }
36 const_reverse_iterator rbegin() const { return d.rbegin(); }
37 reverse_iterator rend() { return d.rend(); }
38 const_reverse_iterator rend() const { return d.rend(); }
39
40 iterator begin() { return d.begin(); }
41 const_iterator begin() const { return d.begin(); }
42 iterator end() { return d.end(); }
43 const_iterator end() const { return d.end(); }
44
45 void push_back(T* elem) { d.push_back(elem); }
46 void push_front(T* elem) { d.push_front(elem); }
47
48 void pop_back() { delete d.back(); d.pop_back(); }
49 void pop_front() { delete d.front(); d.pop_front(); }
50
51 T*& front() { return d.front(); }
52 const T* front() const { return d.front(); }
53 T*& back() { return d.back(); }
54 const T* back() const { return d.back(); }
55
56 std::deque<T*>& get() { return d; }
57 const std::deque<T*>& get() const { return d; }
58 void swap(ScopedDeque<T>& other) { d.swap(other.d); }
59 void release(std::deque<T*>* out) {
60 out->swap(d);
61 d.clear();
62 }
63
64 void clear() {
65 STLDeleteElements(&d);
66 d.clear();
67 }
68 void resize(size_t new_size) { d.resize(new_size); }
69
70 // Lets the ScopedDeque take ownership of |x|.
71 iterator insert(iterator position, T* x) {
72 return d.insert(position, x);
73 }
74
75 // Lets the ScopedDeque take ownership of elements in [first,last).
76 template<typename InputIterator>
77 void insert(iterator position, InputIterator first, InputIterator last) {
78 d.insert(position, first, last);
79 }
80
81 iterator erase(iterator position) {
82 delete *position;
83 return d.erase(position);
84 }
85
86 iterator erase(iterator first, iterator last) {
87 STLDeleteContainerPointers(first, last);
88 return d.erase(first, last);
89 }
90
91 // Like |erase()|, but doesn't delete the element at |position|.
92 iterator weak_erase(iterator position) {
93 return d.erase(position);
94 }
95
96 // Like |erase()|, but doesn't delete the elements in [first, last).
97 iterator weak_erase(iterator first, iterator last) {
98 return d.erase(first, last);
99 }
100 private:
sky 2011/10/20 16:33:03 newline between 99 and 100.
101 std::deque<T*> d;
102
103 DISALLOW_COPY_AND_ASSIGN(ScopedDeque);
104 };
105
106 #endif // BASE_MEMORY_SCOPED_DEQUE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698