tdb2: get rid of zones
[ccan] / ccan / tdb2 / test / layout.h
1 #ifndef TDB2_TEST_LAYOUT_H
2 #define TDB2_TEST_LAYOUT_H
3 #include <ccan/tdb2/private.h>
4
5 struct tdb_layout *new_tdb_layout(const char *filename);
6 void tdb_layout_add_freelist(struct tdb_layout *layout);
7 void tdb_layout_add_free(struct tdb_layout *layout, tdb_len_t len);
8 void tdb_layout_add_used(struct tdb_layout *layout,
9                          TDB_DATA key, TDB_DATA data,
10                          tdb_len_t extra);
11 #if 0 /* FIXME: Allow allocation of subtables */
12 void tdb_layout_add_hashtable(struct tdb_layout *layout,
13                               int htable_parent, /* -1 == toplevel */
14                               unsigned int bucket,
15                               tdb_len_t extra);
16 #endif
17 struct tdb_context *tdb_layout_get(struct tdb_layout *layout);
18
19 enum layout_type {
20         FREELIST, FREE, DATA, HASHTABLE,
21 };
22
23 /* Shared by all union members. */
24 struct tle_base {
25         enum layout_type type;
26         tdb_off_t off;
27 };
28
29 struct tle_freelist {
30         struct tle_base base;
31 };
32
33 struct tle_free {
34         struct tle_base base;
35         tdb_len_t len;
36 };
37
38 struct tle_used {
39         struct tle_base base;
40         TDB_DATA key;
41         TDB_DATA data;
42         tdb_len_t extra;
43 };
44
45 struct tle_hashtable {
46         struct tle_base base;
47         int parent;
48         unsigned int bucket;
49         tdb_len_t extra;
50 };
51
52 union tdb_layout_elem {
53         struct tle_base base;
54         struct tle_freelist flist;
55         struct tle_free free;
56         struct tle_used used;
57         struct tle_hashtable hashtable;
58 };
59
60 struct tdb_layout {
61         const char *filename;
62         unsigned int num_elems;
63         union tdb_layout_elem *elem;
64 };
65 #endif /* TDB2_TEST_LAYOUT_H */