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 TRACE_TEMPLATED_SUPER_H_
6#define TRACE_TEMPLATED_SUPER_H_
7
8#include "heap/stubs.h"
9
10namespace blink {
11
12class HeapObject;
13
14class Mixin : public GarbageCollectedMixin {
15public:
16    virtual void trace(Visitor*) { }
17};
18
19template<typename T>
20class Super : public GarbageCollected<Super<T> >, public Mixin {
21    USING_GARBAGE_COLLECTED_MIXIN(Super);
22public:
23    virtual void trace(Visitor*);
24    void clearWeakMembers(Visitor*);
25private:
26    Member<HeapObject> m_obj;
27    WeakMember<HeapObject> m_weak;
28};
29
30template<typename T>
31class Sub : public Super<T> {
32public:
33    virtual void trace(Visitor* visitor);
34private:
35    Member<HeapObject> m_obj;
36};
37
38class HeapObject : public Sub<HeapObject> {
39public:
40    virtual void trace(Visitor*);
41private:
42    Member<HeapObject> m_obj;
43};
44
45}
46
47#endif
48