diff options
author | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-17 20:40:41 +0000 |
---|---|---|
committer | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-17 20:40:41 +0000 |
commit | d7e4f4076a26640781741c1689543b4edaa4be3b (patch) | |
tree | b32f938a4d55f59c4599b4a01ff900c14885d3fa /cc/scoped_ptr_deque.h | |
parent | 6b703412f2af036149ac201581ef9c215a04ba41 (diff) | |
download | chromium_src-d7e4f4076a26640781741c1689543b4edaa4be3b.zip chromium_src-d7e4f4076a26640781741c1689543b4edaa4be3b.tar.gz chromium_src-d7e4f4076a26640781741c1689543b4edaa4be3b.tar.bz2 |
cc: Change cc's use of wtf/Deque to <deque>
Also, add a ScopedPtrDeque to replace WTF::Deque<OwnPtr<...> >.
R=jamesr@chromium.org
BUG=154451
Review URL: https://chromiumcodereview.appspot.com/11188010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@162514 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/scoped_ptr_deque.h')
-rw-r--r-- | cc/scoped_ptr_deque.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/cc/scoped_ptr_deque.h b/cc/scoped_ptr_deque.h new file mode 100644 index 0000000..33d94e1 --- /dev/null +++ b/cc/scoped_ptr_deque.h @@ -0,0 +1,99 @@ +// Copyright 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CC_SCOPED_PTR_DEQUE_H_ +#define CC_SCOPED_PTR_DEQUE_H_ + +#include "base/basictypes.h" +#include "base/memory/scoped_ptr.h" +#include "base/stl_util.h" +#include <deque> + +namespace cc { + +// This type acts like a deque<scoped_ptr> based on top of std::deque. The +// ScopedPtrDeque has ownership of all elements in the deque. +template <typename T> +class ScopedPtrDeque { + public: + typedef typename std::deque<T*>::iterator iterator; + typedef typename std::deque<T*>::const_iterator const_iterator; + typedef typename std::deque<T*>::reverse_iterator reverse_iterator; + typedef typename std::deque<T*>::const_reverse_iterator const_reverse_iterator; + + ScopedPtrDeque() {} + + ~ScopedPtrDeque() { clear(); } + + size_t size() const { + return data_.size(); + } + + T* Peek(size_t index) const { + ASSERT(index < size()); + return data_[index]; + } + + T* operator[](size_t index) const { + return Peek(index); + } + + T* first() const { + ASSERT(!isEmpty()); + return Peek(0); + } + + T* last() const { + ASSERT(!isEmpty()); + return Peek(size() - 1); + } + + bool isEmpty() const { + return size() == 0; + } + + scoped_ptr<T> takeFirst() { + scoped_ptr<T> ret(first()); + data_.pop_front(); + return ret.Pass(); + } + + scoped_ptr<T> takeLast() { + scoped_ptr<T> ret(last()); + data_.pop_back(); + return ret.Pass(); + } + + void clear() { + STLDeleteElements(&data_); + } + + void append(scoped_ptr<T> item) { + data_.push_back(item.release()); + } + + void insert(size_t index, scoped_ptr<T> item) { + ASSERT(index < size()); + data_.insert(data_.begin() + index, item.release()); + } + + iterator begin() { return data_.begin(); } + const_iterator begin() const { return data_.begin(); } + iterator end() { return data_.end(); } + const_iterator end() const { return data_.end(); } + + reverse_iterator rbegin() { return data_.rbegin(); } + const_reverse_iterator rbegin() const { return data_.rbegin(); } + reverse_iterator rend() { return data_.rend(); } + const_reverse_iterator rend() const { return data_.rend(); } + + private: + std::deque<T*> data_; + + DISALLOW_COPY_AND_ASSIGN(ScopedPtrDeque); +}; + +} // namespace cc + +#endif // CC_SCOPED_PTR_DEQUE_H_ |