19 static size_t m = 32 * 1024 * 1024;
49 std::list<MEM_CacheLimiterHandleCClass *, MEM_Allocator<MEM_CacheLimiterHandleCClass *>>;
55 : data_destructor(data_destructor_), cache(data_size)
80 : data(data_), parent(parent_)
110 list_t::iterator it = cclass_list.end();
112 cclass_list.back()->set_iter(it);
114 return cache.insert(cclass_list.back());
119 data_destructor(
data);
120 cclass_list.erase(it);
126 parent->destruct(data, it);
133 for (list_t::iterator it = cclass_list.begin(); it != cclass_list.end(); it++) {
134 (*it)->set_data(
nullptr);
170 cast(This)->get_cache()->enforce_limits();
175 cast(handle)->unmanage();
180 cast(handle)->touch();
190 cast(handle)->unref();
195 return cast(handle)->get_refcount();
200 return cast(handle)->get()->get_data();
206 cast(This)->get_cache()->set_item_priority_func(item_priority_func);
212 cast(This)->get_cache()->set_item_destroyable_func(item_destroyable_func);
217 return cast(This)->get_cache()->get_memory_in_use();
void MEM_CacheLimiter_ItemPriority_Func_set(MEM_CacheLimiterC *This, MEM_CacheLimiter_ItemPriority_Func item_priority_func)
void MEM_CacheLimiter_set_maximum(size_t m)
void MEM_CacheLimiter_enforce_limits(MEM_CacheLimiterC *This)
void MEM_CacheLimiter_touch(MEM_CacheLimiterHandleC *handle)
void MEM_CacheLimiter_unref(MEM_CacheLimiterHandleC *handle)
MEM_CacheLimiter< MEM_CacheLimiterHandleCClass > cache_t
void delete_MEM_CacheLimiter(MEM_CacheLimiterC *This)
int MEM_CacheLimiter_get_refcount(MEM_CacheLimiterHandleC *handle)
void MEM_CacheLimiter_ItemDestroyable_Func_set(MEM_CacheLimiterC *This, MEM_CacheLimiter_ItemDestroyable_Func item_destroyable_func)
std::list< MEM_CacheLimiterHandleCClass *, MEM_Allocator< MEM_CacheLimiterHandleCClass * > > list_t
size_t MEM_CacheLimiter_get_memory_in_use(MEM_CacheLimiterC *This)
void MEM_CacheLimiter_set_disabled(bool disabled)
size_t MEM_CacheLimiter_get_maximum()
static size_t & get_max()
MEM_CacheLimiterHandle< MEM_CacheLimiterHandleCClass > handle_t
bool MEM_CacheLimiter_is_disabled(void)
MEM_CacheLimiterC * new_MEM_CacheLimiter(MEM_CacheLimiter_Destruct_Func data_destructor, MEM_CacheLimiter_DataSize_Func data_size)
MEM_CacheLimiterHandleC * MEM_CacheLimiter_insert(MEM_CacheLimiterC *This, void *data)
void MEM_CacheLimiter_ref(MEM_CacheLimiterHandleC *handle)
void MEM_CacheLimiter_unmanage(MEM_CacheLimiterHandleC *handle)
void * MEM_CacheLimiter_get(MEM_CacheLimiterHandleC *handle)
struct MEM_CacheLimiter_s MEM_CacheLimiterC
int(*)(void *, int) MEM_CacheLimiter_ItemPriority_Func
size_t(*)(void *) MEM_CacheLimiter_DataSize_Func
void(*)(void *) MEM_CacheLimiter_Destruct_Func
struct MEM_CacheLimiterHandle_s MEM_CacheLimiterHandleC
bool(*)(void *) MEM_CacheLimiter_ItemDestroyable_Func
BMesh const char void * data
ATTR_WARN_UNUSED_RESULT const BMLoop * l
void destruct(void *data, list_t::iterator it)
MEM_CacheLimiterCClass(MEM_CacheLimiter_Destruct_Func data_destructor_, MEM_CacheLimiter_DataSize_Func data_size)
~MEM_CacheLimiterCClass()
handle_t * insert(void *data)
~MEM_CacheLimiterHandleCClass()
void set_iter(list_t::iterator it_)
void set_data(void *data_)
MEM_CacheLimiterHandleCClass(void *data_, MEM_CacheLimiterCClass *parent_)