Lines Matching refs:lru

90 static void * alloc_new_node(lv_lru_rb_t_ * lru, void * key, void * user_data);
91 inline static void ** get_lru_node(lv_lru_rb_t_ * lru, lv_rb_node_t * node);
146 static void * alloc_new_node(lv_lru_rb_t_ * lru, void * key, void * user_data) in alloc_new_node() argument
150 LV_ASSERT_NULL(lru); in alloc_new_node()
153 if(lru == NULL || key == NULL) { in alloc_new_node()
157 lv_rb_node_t * node = lv_rb_insert(&lru->rb, key); in alloc_new_node()
162 lv_cache_entry_t * entry = lv_cache_entry_get_entry(data, lru->cache.node_size); in alloc_new_node()
163 lv_memcpy(data, key, lru->cache.node_size); in alloc_new_node()
165 void * lru_node = lv_ll_ins_head(&lru->ll); in alloc_new_node()
170 lv_memcpy(get_lru_node(lru, node), &lru_node, sizeof(void *)); in alloc_new_node()
172 lv_cache_entry_init(entry, &lru->cache, lru->cache.node_size); in alloc_new_node()
176 lv_rb_drop_node(&lru->rb, node); in alloc_new_node()
182 inline static void ** get_lru_node(lv_lru_rb_t_ * lru, lv_rb_node_t * node) in get_lru_node() argument
184 return (void **)((char *)node->data + lru->rb.size - sizeof(void *)); in get_lru_node()
202 lv_lru_rb_t_ * lru = (lv_lru_rb_t_ *)cache; in init_cnt_cb() local
204 LV_ASSERT_NULL(lru->cache.ops.compare_cb); in init_cnt_cb()
205 LV_ASSERT_NULL(lru->cache.ops.free_cb); in init_cnt_cb()
206 LV_ASSERT(lru->cache.node_size > 0); in init_cnt_cb()
208 …if(lru->cache.node_size <= 0 || lru->cache.ops.compare_cb == NULL || lru->cache.ops.free_cb == NUL… in init_cnt_cb()
213 …if(!lv_rb_init(&lru->rb, lru->cache.ops.compare_cb, lv_cache_entry_get_size(lru->cache.node_size) … in init_cnt_cb()
216 lv_ll_init(&lru->ll, sizeof(void *)); in init_cnt_cb()
218 lru->get_data_size_cb = cnt_get_data_size_cb; in init_cnt_cb()
225 lv_lru_rb_t_ * lru = (lv_lru_rb_t_ *)cache; in init_size_cb() local
227 LV_ASSERT_NULL(lru->cache.ops.compare_cb); in init_size_cb()
228 LV_ASSERT_NULL(lru->cache.ops.free_cb); in init_size_cb()
229 LV_ASSERT(lru->cache.node_size > 0); in init_size_cb()
231 …if(lru->cache.node_size <= 0 || lru->cache.ops.compare_cb == NULL || lru->cache.ops.free_cb == NUL… in init_size_cb()
236 …if(!lv_rb_init(&lru->rb, lru->cache.ops.compare_cb, lv_cache_entry_get_size(lru->cache.node_size) … in init_size_cb()
239 lv_ll_init(&lru->ll, sizeof(void *)); in init_size_cb()
241 lru->get_data_size_cb = size_get_data_size_cb; in init_size_cb()
250 lv_lru_rb_t_ * lru = (lv_lru_rb_t_ *)cache; in destroy_cb() local
252 LV_ASSERT_NULL(lru); in destroy_cb()
254 if(lru == NULL) { in destroy_cb()
265 lv_lru_rb_t_ * lru = (lv_lru_rb_t_ *)cache; in get_cb() local
267 LV_ASSERT_NULL(lru); in get_cb()
270 if(lru == NULL || key == NULL) { in get_cb()
275 void * head = lv_ll_get_head(&lru->ll); in get_cb()
280 if(lru->cache.ops.compare_cb(data, key) == 0) { in get_cb()
285 lv_rb_node_t * node = lv_rb_find(&lru->rb, key); in get_cb()
288 void * lru_node = *get_lru_node(lru, node); in get_cb()
289 head = lv_ll_get_head(&lru->ll); in get_cb()
290 lv_ll_move_before(&lru->ll, lru_node, head); in get_cb()
302 lv_lru_rb_t_ * lru = (lv_lru_rb_t_ *)cache; in add_cb() local
304 LV_ASSERT_NULL(lru); in add_cb()
307 if(lru == NULL || key == NULL) { in add_cb()
311 lv_rb_node_t * new_node = alloc_new_node(lru, (void *)key, user_data); in add_cb()
318 cache->size += lru->get_data_size_cb(key); in add_cb()
327 lv_lru_rb_t_ * lru = (lv_lru_rb_t_ *)cache; in remove_cb() local
329 LV_ASSERT_NULL(lru); in remove_cb()
332 if(lru == NULL || entry == NULL) { in remove_cb()
337 lv_rb_node_t * node = lv_rb_find(&lru->rb, data); in remove_cb()
342 void * lru_node = *get_lru_node(lru, node); in remove_cb()
343 lv_rb_remove_node(&lru->rb, node); in remove_cb()
344 lv_ll_remove(&lru->ll, lru_node); in remove_cb()
347 cache->size -= lru->get_data_size_cb(data); in remove_cb()
352 lv_lru_rb_t_ * lru = (lv_lru_rb_t_ *)cache; in drop_cb() local
354 LV_ASSERT_NULL(lru); in drop_cb()
357 if(lru == NULL || key == NULL) { in drop_cb()
361 lv_rb_node_t * node = lv_rb_find(&lru->rb, key); in drop_cb()
368 lru->cache.ops.free_cb(data, user_data); in drop_cb()
369 cache->size -= lru->get_data_size_cb(data); in drop_cb()
372 void * lru_node = *get_lru_node(lru, node); in drop_cb()
374 lv_rb_remove_node(&lru->rb, node); in drop_cb()
377 lv_ll_remove(&lru->ll, lru_node); in drop_cb()
383 lv_lru_rb_t_ * lru = (lv_lru_rb_t_ *)cache; in drop_all_cb() local
385 LV_ASSERT_NULL(lru); in drop_all_cb()
387 if(lru == NULL) { in drop_all_cb()
393 LV_LL_READ(&lru->ll, node) { in drop_all_cb()
398 lru->cache.ops.free_cb(search_key, user_data); in drop_all_cb()
409 lv_rb_destroy(&lru->rb); in drop_all_cb()
410 lv_ll_clear(&lru->ll); in drop_all_cb()
419 lv_lru_rb_t_ * lru = (lv_lru_rb_t_ *)cache; in get_victim_cb() local
421 LV_ASSERT_NULL(lru); in get_victim_cb()
424 LV_LL_READ_BACK(&lru->ll, tail) { in get_victim_cb()
440 lv_lru_rb_t_ * lru = (lv_lru_rb_t_ *)cache; in reserve_cond_cb() local
442 LV_ASSERT_NULL(lru); in reserve_cond_cb()
444 if(lru == NULL) { in reserve_cond_cb()
448 uint32_t data_size = key ? lru->get_data_size_cb(key) : 0; in reserve_cond_cb()
449 if(data_size > lru->cache.max_size) { in reserve_cond_cb()
450 …a size (%" LV_PRIu32 ") is larger than max size (%" LV_PRIu32 ")", data_size, lru->cache.max_size); in reserve_cond_cb()
454 return cache->size + reserved_size + data_size > lru->cache.max_size in reserve_cond_cb()
478 lv_lru_rb_t_ * lru = (lv_lru_rb_t_ *)instance; in cache_iter_next_cb() local
483 if(*ll_node == NULL) *ll_node = lv_ll_get_head(&lru->ll); in cache_iter_next_cb()
484 else *ll_node = lv_ll_get_next(&lru->ll, *ll_node); in cache_iter_next_cb()
490 uint32_t node_size = lru->cache.node_size; in cache_iter_next_cb()