Merge branch 'master' into prog-loader
[lunaix-os.git] / lunaix-os / includes / lunaix / ds / lru.h
1 #ifndef __LUNAIX_LRU_H
2 #define __LUNAIX_LRU_H
3
4 #include <lunaix/ds/llist.h>
5 #include <lunaix/types.h>
6
7 struct lru_node
8 {
9     struct llist_header lru_nodes;
10 };
11
12 typedef int (*evict_cb)(struct lru_node* lru_obj);
13
14 struct lru_zone
15 {
16     struct llist_header lead_node;
17     struct llist_header zones;
18     u32_t objects;
19     evict_cb try_evict;
20 };
21
22 struct lru_zone*
23 lru_new_zone(evict_cb try_evict_cb);
24
25 void
26 lru_use_one(struct lru_zone* zone, struct lru_node* node);
27
28 void
29 lru_evict_one(struct lru_zone* zone);
30
31 void
32 lru_remove(struct lru_zone* zone, struct lru_node* node);
33
34 void
35 lru_evict_half(struct lru_zone* zone);
36
37 #endif /* __LUNAIX_LRU_H */