add xtypes to kernel makefile
[archipelago] / xseg / xtypes / xpool.h
1 #ifndef XPOOL_H
2 #define XPOOL_H
3
4 #include <sys/util.h>
5 #include <xtypes/xlock.h>
6 //#include <xseg/xseg.h>
7
8 typedef uint64_t xpool_index;
9 typedef uint64_t xpool_data;
10 #define NoIndex ((xpool_index) -1)
11
12
13 struct xpool_node {
14         xpool_data data;
15         //XPTR_TYPE(struct xpool_node) next;
16         //XPTR_TYPE(struct xpool_node) prev;
17         xpool_index next;
18         xpool_index prev;
19 };
20
21 struct xpool {
22         struct xlock lock;
23         //XPTR_TYPE(struct xpool_node) list;
24         //XPTR_TYPE(struct xpool_node) free;
25         xpool_index list;
26         xpool_index free;
27         uint64_t size;
28         XPTR_TYPE(struct xpool_node) mem;
29 };
30
31 void xpool_init(struct xpool *xp, uint64_t size, struct xpool_node* mem);
32 void xpool_clear(struct xpool *xp, uint32_t who);
33 xpool_index xpool_add(struct xpool *xp, xpool_data data, uint32_t who);
34 xpool_index xpool_remove(struct xpool *xp, xpool_index idx, xpool_data *data, uint32_t who);
35 xpool_index xpool_peek(struct xpool *xp, xpool_data *data, uint32_t who);
36 xpool_index xpool_peek_idx(struct xpool *xp, xpool_index idx, xpool_data *data, uint32_t who);
37 xpool_index xpool_peek_and_fwd(struct xpool *xp, xpool_data *data, uint32_t who);
38 xpool_index xpool_set_idx(struct xpool *xp, xpool_index idx, xpool_data data, uint32_t who);
39
40 void __xpool_clear(struct xpool *xp);
41 xpool_index __xpool_add(struct xpool *xp, xpool_data data);
42 xpool_index __xpool_remove(struct xpool *xp, xpool_index idx, xpool_data *data);
43 xpool_index __xpool_peek(struct xpool *xp, xpool_data *data);
44 xpool_index __xpool_peek_idx(struct xpool *xp, xpool_index idx, xpool_data *data);
45 xpool_index __xpool_peek_and_fwd(struct xpool *xp, xpool_data *data);
46 xpool_index __xpool_set_idx(struct xpool *xp, xpool_index idx, xpool_data data);
47
48 #endif /* XPOOL_H */