Merge branch 'master' into prog-loader
[lunaix-os.git] / lunaix-os / includes / lunaix / ds / lru.h
index 5ae607d24e6d223da8da22235fb22a4586871113..76c959749c69b7675daeebd5c792db8752001084 100644 (file)
@@ -2,28 +2,36 @@
 #define __LUNAIX_LRU_H
 
 #include <lunaix/ds/llist.h>
+#include <lunaix/types.h>
 
-struct lru_zone
+struct lru_node
 {
-    struct llist_header lead_node;
-    struct llist_header zones;
+    struct llist_header lru_nodes;
 };
 
-struct lru_node
+typedef int (*evict_cb)(struct lru_node* lru_obj);
+
+struct lru_zone
 {
-    struct llist_header lru_nodes;
+    struct llist_header lead_node;
+    struct llist_header zones;
+    u32_t objects;
+    evict_cb try_evict;
 };
 
 struct lru_zone*
-lru_new_zone();
+lru_new_zone(evict_cb try_evict_cb);
 
 void
 lru_use_one(struct lru_zone* zone, struct lru_node* node);
 
-struct lru_node*
+void
 lru_evict_one(struct lru_zone* zone);
 
 void
-lru_remove(struct lru_node* node);
+lru_remove(struct lru_zone* zone, struct lru_node* node);
+
+void
+lru_evict_half(struct lru_zone* zone);
 
 #endif /* __LUNAIX_LRU_H */