16 static size_t m = 32 * 1024 * 1024;
45 typedef std::list<MEM_CacheLimiterHandleCClass *, MEM_Allocator<MEM_CacheLimiterHandleCClass *>>
52 : data_destructor(data_destructor_), cache(data_size)
77 : data(
data_), parent(parent_)
107 list_t::iterator it = cclass_list.end();
109 cclass_list.back()->set_iter(it);
111 return cache.
insert(cclass_list.back());
116 data_destructor(
data);
117 cclass_list.erase(it);
130 for (list_t::iterator it = cclass_list.begin(); it != cclass_list.end(); it++) {
131 (*it)->set_data(
NULL);
172 cast(handle)->unmanage();
177 cast(handle)->touch();
187 cast(handle)->unref();
192 return cast(handle)->get_refcount();
197 return cast(handle)->get()->get_data();
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)
MEM_CacheLimiter< MEM_CacheLimiterHandleCClass > cache_t
void MEM_CacheLimiter_touch(MEM_CacheLimiterHandleC *handle)
MEM_CacheLimiterHandleC * MEM_CacheLimiter_insert(MEM_CacheLimiterC *This, void *data)
void MEM_CacheLimiter_unref(MEM_CacheLimiterHandleC *handle)
void delete_MEM_CacheLimiter(MEM_CacheLimiterC *This)
int MEM_CacheLimiter_get_refcount(MEM_CacheLimiterHandleC *handle)
void * MEM_CacheLimiter_get(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)
MEM_CacheLimiterHandle< MEM_CacheLimiterHandleCClass > handle_t
size_t MEM_CacheLimiter_get_maximum()
bool MEM_CacheLimiter_is_disabled(void)
static size_t & get_max()
static MEM_CacheLimiterCClass * cast(MEM_CacheLimiterC *l)
void MEM_CacheLimiter_ref(MEM_CacheLimiterHandleC *handle)
void MEM_CacheLimiter_unmanage(MEM_CacheLimiterHandleC *handle)
MEM_CacheLimiterC * new_MEM_CacheLimiter(MEM_CacheLimiter_Destruct_Func data_destructor, MEM_CacheLimiter_DataSize_Func data_size)
struct MEM_CacheLimiterHandle_s MEM_CacheLimiterHandleC
int(* MEM_CacheLimiter_ItemPriority_Func)(void *, int)
bool(* MEM_CacheLimiter_ItemDestroyable_Func)(void *)
void(* MEM_CacheLimiter_Destruct_Func)(void *)
struct MEM_CacheLimiter_s MEM_CacheLimiterC
size_t(* MEM_CacheLimiter_DataSize_Func)(void *)
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_)
size_t get_memory_in_use()
MEM_CacheLimiterHandle< T > * insert(T *elem)
void set_item_destroyable_func(MEM_CacheLimiter_ItemDestroyable_Func item_destroyable_func)
void set_item_priority_func(MEM_CacheLimiter_ItemPriority_Func item_priority_func)