#include "evas_common_private.h"
-#define LRU_CACHE_LIMIT 25
-
EAPI Generic_Cache*
generic_cache_new(void *user_data, Generic_Cache_Free func)
{
entry->data = surface;
entry->ref = 1;
eina_hash_add(cache->hash, &key, entry);
- cache->lru_list = eina_list_prepend(cache->lru_list, entry);
- count = eina_list_count(cache->lru_list);
-
- if (count > LRU_CACHE_LIMIT)
- {
- entry = eina_list_data_get(eina_list_last(cache->lru_list));
- // if its still being ref.
- if (entry->ref > 1) return;
- eina_hash_del(cache->hash, &entry->key, entry);
- cache->lru_list = eina_list_remove_list(cache->lru_list, eina_list_last(cache->lru_list));
- cache->free_func(cache->user_data, entry->data);
- free(entry);
- }
+ cache->lru_list = eina_list_append(cache->lru_list, entry);
}
EAPI void *
if (entry)
{
++entry->ref;
-
- //promote in lru
- EINA_LIST_FOREACH(cache->lru_list, l, lru_data)
- {
- if (lru_data == entry)
- {
- cache->lru_list = eina_list_promote_list(cache->lru_list, l);
- break;
- }
- }
return entry->data;
}
return NULL;
{
Generic_Cache_Entry *entry = NULL;
- entry = eina_hash_find(cache->hash, &key);
+ entry = eina_hash_find(cache->hash, &key);
if (entry)
{
if (--entry->ref > 0) return;