File indexing completed on 2025-04-02 08:54:42
0001
0002
0003
0004
0005 #ifndef INCLUDE_CPPGC_OBJECT_SIZE_TRAIT_H_
0006 #define INCLUDE_CPPGC_OBJECT_SIZE_TRAIT_H_
0007
0008 #include <cstddef>
0009
0010 #include "cppgc/type-traits.h"
0011 #include "v8config.h" // NOLINT(build/include_directory)
0012
0013 namespace cppgc {
0014
0015 namespace internal {
0016
0017 struct V8_EXPORT BaseObjectSizeTrait {
0018 protected:
0019 static size_t GetObjectSizeForGarbageCollected(const void*);
0020 static size_t GetObjectSizeForGarbageCollectedMixin(const void*);
0021 };
0022
0023 }
0024
0025 namespace subtle {
0026
0027
0028
0029
0030
0031
0032 template <typename T, bool = IsGarbageCollectedMixinTypeV<T>>
0033 struct ObjectSizeTrait;
0034
0035 template <typename T>
0036 struct ObjectSizeTrait<T, false> : cppgc::internal::BaseObjectSizeTrait {
0037 static_assert(sizeof(T), "T must be fully defined");
0038 static_assert(IsGarbageCollectedTypeV<T>,
0039 "T must be of type GarbageCollected or GarbageCollectedMixin");
0040
0041 static size_t GetSize(const T& object) {
0042 return GetObjectSizeForGarbageCollected(&object);
0043 }
0044 };
0045
0046 template <typename T>
0047 struct ObjectSizeTrait<T, true> : cppgc::internal::BaseObjectSizeTrait {
0048 static_assert(sizeof(T), "T must be fully defined");
0049
0050 static size_t GetSize(const T& object) {
0051 return GetObjectSizeForGarbageCollectedMixin(&object);
0052 }
0053 };
0054
0055 }
0056 }
0057
0058 #endif