5#ifndef V8_OBJECTS_MANAGED_H_
6#define V8_OBJECTS_MANAGED_H_
44template <
typename CppType>
49#define ASSIGN_EXTERNAL_POINTER_TAG_FOR_MANAGED(CppType, Tag) \
51 struct TagForManaged<CppType> { \
52 static constexpr ExternalPointerTag value = Tag; \
57#ifdef V8_ENABLE_SANDBOX
58 :
public ExternalPointerTable::ManagedResource {
75 void (*destructor)(
void*))
93template <
class CppType>
94class Managed :
public Foreign {
99 :
Foreign(ptr, SkipTypeCheckTag{}) {}
110 V8_INLINE const std::shared_ptr<CppType>&
get() {
return *GetSharedPtrPtr(); }
118 Isolate* isolate,
size_t estimated_size,
119 std::shared_ptr<CppType> shared_ptr,
133 return reinterpret_cast<std::shared_ptr<CppType>*
>(
134 GetDestructor()->shared_ptr_ptr_);
141template <
class CppType>
142class TrustedManaged :
public TrustedForeign {
158 V8_INLINE const std::shared_ptr<CppType>&
get() {
return *GetSharedPtrPtr(); }
163 Isolate* isolate,
size_t estimated_size,
164 std::shared_ptr<CppType> shared_ptr);
174 return reinterpret_cast<std::shared_ptr<CppType>*
>(
175 destructor->shared_ptr_ptr_);
std::shared_ptr< CppType > * GetSharedPtrPtr()
const Managed * operator->() const
V8_INLINE const std::shared_ptr< CppType > & get()
ManagedPtrDestructor * GetDestructor() const
V8_INLINE CppType * raw()
V8_INLINE constexpr Managed(Address ptr, SkipTypeCheckTag)
size_t estimated_size() const
TrustedManaged(Address ptr)
V8_INLINE const std::shared_ptr< CppType > & get()
std::shared_ptr< CppType > * GetSharedPtrPtr()
V8_INLINE constexpr TrustedManaged(Address ptr, SkipTypeCheckTag)
V8_INLINE CppType * raw()
const TrustedManaged * operator->() const
TrustedManaged * operator->()
void ManagedObjectFinalizer(const v8::WeakCallbackInfo< void > &data)
#define V8_EXPORT_PRIVATE
ManagedPtrDestructor * prev_
Address * global_handle_location_
void(* destructor_)(void *shared_ptr)
ManagedPtrDestructor * next_
ManagedPtrDestructor(size_t estimated_size, void *shared_ptr_ptr, void(*destructor)(void *))
V8_NO_UNIQUE_ADDRESS ExternalMemoryAccounter external_memory_accounter_
#define V8_NO_UNIQUE_ADDRESS