48 template<
typename T>
T *
add(std::unique_ptr<T> resource);
50 void add(
void *userdata,
void (*
free)(
void *));
55 template<
typename T,
typename... Args>
T &
construct(Args &&...args);
70 T *
ptr = resource.release();
75 T *typed_data =
reinterpret_cast<T *
>(
data);
87 T *
ptr = resource.release();
92 if constexpr (std::is_trivially_destructible_v<T>) {
97 T *typed_data =
reinterpret_cast<T *
>(
data);
110 data.data = userdata;
121 return this->construct<T>(std::forward<T>(value));
130 new (
buffer) Func(std::move(func));
131 this->
add(buffer, [](
void *
data) { (*(Func *)
data)(); });
140 T &value_ref = *value_ptr;
141 this->
add(std::move(value_ptr));
void BLI_kdtree_nd_() free(KDTree *tree)
destruct_ptr< T > construct(Args &&...args)
void * allocate(const int64_t size, const int64_t alignment)
T & construct(Args &&...args)
void add_destruct_call(Func func)
LinearAllocator & linear_allocator()
T * add(std::unique_ptr< T > resource)
void append(const T &value)
SyclQueue void void size_t num_bytes void
ccl_global float * buffer
std::unique_ptr< T, DestructValueAtAddress< T > > destruct_ptr