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