// Copyright 2014 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 RefVector_h #define RefVector_h #include "wtf/RefCounted.h" #include "wtf/RefPtr.h" #include "wtf/Vector.h" namespace blink { template class RefVector : public RefCounted> { public: static PassRefPtr create() { return adoptRef(new RefVector); } static PassRefPtr create(const Vector& vector) { return adoptRef(new RefVector(vector)); } static PassRefPtr create(Vector&& vector) { return adoptRef(new RefVector(vector)); } PassRefPtr copy() { return create(vector()); } const T& operator[](size_t i) const { return m_vector[i]; } T& operator[](size_t i) { return m_vector[i]; } const T& at(size_t i) const { return m_vector.at(i); } T& at(size_t i) { return m_vector.at(i); } bool operator==(const RefVector& o) const { return m_vector == o.m_vector; } bool operator!=(const RefVector& o) const { return m_vector != o.m_vector; } size_t size() const { return m_vector.size(); } bool isEmpty() const { return !size(); } void append(const T& decoration) { m_vector.append(decoration); } const Vector& vector() const { return m_vector; } private: Vector m_vector; RefVector() { } RefVector(const Vector& vector) : m_vector(vector) { } RefVector(Vector&& vector) : m_vector(vector) { } }; } // namespace blink #endif // RefVector_h