• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 TEMPLATED_CLASS_WITH_LOCAL_CLASS_REQUIRES_TRACE_H
6 #define TEMPLATED_CLASS_WITH_LOCAL_CLASS_REQUIRES_TRACE_H
7 
8 #include "heap/stubs.h"
9 
10 namespace blink {
11 
12 class NonHeapObject { };
13 
14 class HeapObject : public GarbageCollected<HeapObject> {
15 public:
HeapObject()16     HeapObject() { }
17 
Trace(Visitor *)18     void Trace(Visitor*) { }
19 };
20 
21 template<typename T>
22 class TemplatedObject final
23     : public GarbageCollectedFinalized<TemplatedObject<T> > {
24 public:
TemplatedObject(T *)25     TemplatedObject(T*)
26     {
27     }
28 
29     void Trace(Visitor*);
30 
31 private:
32     class Local final : public GarbageCollected<Local> {
33     public:
Trace(Visitor * visitor)34         void Trace(Visitor* visitor)
35         {
36             visitor->Trace(m_heapObject);
37             visitor->Trace(m_object);
38         }
39     private:
40         Member<HeapObject> m_heapObject;
41         std::unique_ptr<HeapObject> m_object;
42     };
43 
44     Member<Local> m_local;
45     Member<T> m_memberRef;
46     std::unique_ptr<T> m_uniqueRef;
47 };
48 
49 } // namespace blink
50 
51 #endif // TEMPLATED_CLASS_WITH_LOCAL_CLASS_REQUIRES_TRACE_H
52 
53