fix mt-mapperd pithos read bug. plus some minor fixes
[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
7 typedef uint64_t xpool_index;
8 typedef uint64_t xpool_data;
9 #define NoIndex ((xpool_index) -1)
10
11
12 struct xpool_node {
13         xpool_data data;
14         //XPTR_TYPE(struct xpool_node) next;
15         //XPTR_TYPE(struct xpool_node) prev;
16         xpool_index next;
17         xpool_index prev;
18 };
19
20 struct xpool {
21         struct xlock lock;
22         //XPTR_TYPE(struct xpool_node) list;
23         //XPTR_TYPE(struct xpool_node) free;
24         xpool_index list;
25         xpool_index free;
26         uint64_t size;
27         XPTR_TYPE(struct xpool_node) mem;
28 };
29
30 void xpool_init(struct xpool *xp, uint64_t size, struct xpool_node* mem);
31 void xpool_clear(struct xpool *xp, uint32_t who);
32 xpool_index xpool_add(struct xpool *xp, xpool_data data, uint32_t who);
33 xpool_index xpool_remove(struct xpool *xp, xpool_index idx, xpool_data *data, uint32_t who);
34 xpool_index xpool_peek(struct xpool *xp, xpool_data *data, uint32_t who);
35 xpool_index xpool_peek_idx(struct xpool *xp, xpool_index idx, xpool_data *data, uint32_t who);
36 xpool_index xpool_peek_and_fwd(struct xpool *xp, xpool_data *data, uint32_t who);
37 xpool_index xpool_set_idx(struct xpool *xp, xpool_index idx, xpool_data data, uint32_t who);
38
39 void __xpool_clear(struct xpool *xp);
40 xpool_index __xpool_add(struct xpool *xp, xpool_data data);
41 xpool_index __xpool_remove(struct xpool *xp, xpool_index idx, xpool_data *data);
42 xpool_index __xpool_peek(struct xpool *xp, xpool_data *data);
43 xpool_index __xpool_peek_idx(struct xpool *xp, xpool_index idx, xpool_data *data);
44 xpool_index __xpool_peek_and_fwd(struct xpool *xp, xpool_data *data);
45 xpool_index __xpool_set_idx(struct xpool *xp, xpool_index idx, xpool_data data);
46
47 #endif /* XPOOL_H */