1// Copyright 2014 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 RefVector_h
6#define RefVector_h
7
8#include "wtf/RefCounted.h"
9#include "wtf/RefPtr.h"
10#include "wtf/Vector.h"
11
12namespace blink {
13
14template <typename T>
15class RefVector : public RefCounted<RefVector<T> > {
16public:
17    static PassRefPtr<RefVector> create() { return adoptRef(new RefVector<T>); }
18    PassRefPtr<RefVector> copy() { return adoptRef(new RefVector<T>(*this)); }
19
20    const T& operator[](size_t i) const { return m_vector[i]; }
21    T& operator[](size_t i) { return m_vector[i]; }
22    const T& at(size_t i) const { return m_vector.at(i); }
23    T& at(size_t i) { return m_vector.at(i); }
24
25    bool operator==(const RefVector& o) const { return m_vector == o.m_vector; }
26    bool operator!=(const RefVector& o) const { return m_vector != o.m_vector; }
27
28    size_t size() const { return m_vector.size(); }
29    void append(const T& decoration) { m_vector.append(decoration); }
30    const Vector<T>& vector() const { return m_vector; }
31
32private:
33    Vector<T> m_vector;
34    RefVector() { }
35    RefVector(const RefVector& o) : m_vector(o.m_vector) { }
36};
37
38} // namespace blink
39
40#endif // RefVector_h
41