Home | History | Annotate | Download | only in legacy_naming
      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 TRACEIMPL_H_
      6 #define TRACEIMPL_H_
      7 
      8 #include "heap/stubs.h"
      9 
     10 namespace blink {
     11 
     12 class X : public GarbageCollected<X> {
     13  public:
     14   virtual void trace(Visitor*) {}
     15 };
     16 
     17 class TraceImplInlined : public GarbageCollected<TraceImplInlined> {
     18  public:
     19   void trace(Visitor* visitor) { traceImpl(visitor); }
     20 
     21   template <typename VisitorDispatcher>
     22   void traceImpl(VisitorDispatcher visitor) {
     23     visitor->trace(x_);
     24   }
     25 
     26  private:
     27   Member<X> x_;
     28 };
     29 
     30 class TraceImplExtern : public GarbageCollected<TraceImplExtern> {
     31  public:
     32   void trace(Visitor* visitor);
     33   template <typename VisitorDispatcher>
     34   inline void traceImpl(VisitorDispatcher);
     35 
     36  private:
     37   Member<X> x_;
     38 };
     39 
     40 class Base : public GarbageCollected<Base> {
     41  public:
     42   virtual void trace(Visitor* visitor) {}
     43 };
     44 
     45 class TraceImplBaseInlined : public Base {
     46  public:
     47   void trace(Visitor* visitor) override { traceImpl(visitor); }
     48 
     49   template <typename VisitorDispatcher>
     50   void traceImpl(VisitorDispatcher visitor) {
     51     Base::trace(visitor);
     52   }
     53 };
     54 
     55 class TraceImplBaseExtern : public Base {
     56  public:
     57   void trace(Visitor* visitor) override;
     58 
     59   template <typename VisitorDispatcher>
     60   void traceImpl(VisitorDispatcher);
     61 
     62  private:
     63   Member<X> x_;
     64 };
     65 
     66 }
     67 
     68 #endif
     69