Loading...
Searching...
No Matches
trace-trait.h
Go to the documentation of this file.
1// Copyright 2020 the V8 project 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 INCLUDE_CPPGC_TRACE_TRAIT_H_
6#define INCLUDE_CPPGC_TRACE_TRAIT_H_
7
8#include <type_traits>
9
10#include "cppgc/type-traits.h"
11#include "v8config.h" // NOLINT(build/include_directory)
12
13namespace cppgc {
14
15class Visitor;
16
17namespace internal {
18
19class RootVisitor;
20
21using TraceRootCallback = void (*)(RootVisitor&, const void* object);
22
23// Implementation of the default TraceTrait handling GarbageCollected and
24// GarbageCollectedMixin.
25template <typename T,
26 bool = IsGarbageCollectedMixinTypeV<std::remove_const_t<T>>>
28
29} // namespace internal
30
37using TraceCallback = void (*)(Visitor* visitor, const void* object);
38
53};
54
61using TraceDescriptorCallback = TraceDescriptor (*)(const void* address);
62
63namespace internal {
64
66 static TraceDescriptor GetTraceDescriptor(const void* address);
67};
68
75template <typename T>
77 static_assert(internal::IsTraceableV<T>, "T must have a Trace() method");
78
85 static TraceDescriptor GetTraceDescriptor(const void* self) {
87 static_cast<const T*>(self));
88 }
89
96 static void Trace(Visitor* visitor, const void* self) {
97 static_cast<const T*>(self)->Trace(visitor);
98 }
99};
100
101} // namespace internal
102
103template <typename T>
105
106namespace internal {
107
108template <typename T>
109struct TraceTraitImpl<T, false> {
110 static_assert(IsGarbageCollectedTypeV<T>,
111 "T must be of type GarbageCollected or GarbageCollectedMixin");
112 static TraceDescriptor GetTraceDescriptor(const void* self) {
113 return {self, TraceTrait<T>::Trace};
114 }
115};
116
117template <typename T>
118struct TraceTraitImpl<T, true> {
119 static TraceDescriptor GetTraceDescriptor(const void* self) {
121 }
122};
123
124} // namespace internal
125} // namespace cppgc
126
127#endif // INCLUDE_CPPGC_TRACE_TRAIT_H_
Definition: visitor.h:75
Definition: visitor.h:470
void(*)(RootVisitor &, const void *object) TraceRootCallback
Definition: trace-trait.h:21
Definition: allocation.h:38
void(*)(Visitor *visitor, const void *object) TraceCallback
Definition: trace-trait.h:37
TraceDescriptor(*)(const void *address) TraceDescriptorCallback
Definition: trace-trait.h:61
Definition: trace-trait.h:43
const void * base_object_payload
Definition: trace-trait.h:48
TraceCallback callback
Definition: trace-trait.h:52
Definition: trace-trait.h:104
Definition: trace-trait.h:76
static TraceDescriptor GetTraceDescriptor(const void *self)
Definition: trace-trait.h:85
static void Trace(Visitor *visitor, const void *self)
Definition: trace-trait.h:96
static TraceDescriptor GetTraceDescriptor(const void *address)
static TraceDescriptor GetTraceDescriptor(const void *self)
Definition: trace-trait.h:112
static TraceDescriptor GetTraceDescriptor(const void *self)
Definition: trace-trait.h:119
Definition: trace-trait.h:27
#define V8_EXPORT
Definition: v8config.h:800