53 const char *debug_name;
66 ResourceData &
data = m_resources[i];
75 template<
typename T>
T *
add(std::unique_ptr<T> resource,
const char *name)
78 T *
ptr = resource.release();
85 T *typed_data =
reinterpret_cast<T *
>(
data);
98 T *
ptr = resource.release();
103 if (std::is_trivially_destructible_v<T>) {
110 T *typed_data =
reinterpret_cast<T *
>(
data);
121 void add(
void *userdata,
void (*
free)(
void *),
const char *name)
124 data.debug_name = name;
125 data.data = userdata;
136 return this->construct<T>(name, std::forward<T>(value));
151 template<
typename T,
typename... Args>
T &
construct(
const char *name, Args &&... args)
154 T &value_ref = *value_ptr;
155 this->
add(std::move(value_ptr), name);
165 if (m_resources.
size() == 0) {
166 std::cout <<
"\"" << name <<
"\" has no resources.\n";
170 std::cout <<
"Resources for \"" << name <<
"\":\n";
171 for (
const ResourceData &
data : m_resources) {
172 std::cout <<
" " <<
data.data <<
": " <<
data.debug_name <<
'\n';
void BLI_kdtree_nd_() free(KDTree *tree)
destruct_ptr< T > construct(Args &&... args)
T & construct(const char *name, Args &&... args)
T * add(destruct_ptr< T > resource, const char *name)
T & add_value(T &&value, const char *name)
LinearAllocator & linear_allocator()
void add(void *userdata, void(*free)(void *), const char *name)
void print(StringRef name) const
T * add(std::unique_ptr< T > resource, const char *name)
void append(const T &value)
std::unique_ptr< T, DestructValueAtAddress< T > > destruct_ptr