tdb2: use separate magic constants for chain, htable and ftable entries
[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_freetable(struct tdb_layout *layout);
7 void tdb_layout_add_free(struct tdb_layout *layout, tdb_len_t len,
8                          unsigned ftable);
9 void tdb_layout_add_used(struct tdb_layout *layout,
10                          TDB_DATA key, TDB_DATA data,
11                          tdb_len_t extra);
12 #if 0 /* FIXME: Allow allocation of subtables */
13 void tdb_layout_add_hashtable(struct tdb_layout *layout,
14                               int htable_parent, /* -1 == toplevel */
15                               unsigned int bucket,
16                               tdb_len_t extra);
17 #endif
18 struct tdb_context *tdb_layout_get(struct tdb_layout *layout);
19
20 enum layout_type {
21         FREETABLE, FREE, DATA, HASHTABLE,
22 };
23
24 /* Shared by all union members. */
25 struct tle_base {
26         enum layout_type type;
27         tdb_off_t off;
28 };
29
30 struct tle_freetable {
31         struct tle_base base;
32 };
33
34 struct tle_free {
35         struct tle_base base;
36         tdb_len_t len;
37         unsigned ftable_num;
38 };
39
40 struct tle_used {
41         struct tle_base base;
42         TDB_DATA key;
43         TDB_DATA data;
44         tdb_len_t extra;
45 };
46
47 struct tle_hashtable {
48         struct tle_base base;
49         int parent;
50         unsigned int bucket;
51         tdb_len_t extra;
52 };
53
54 union tdb_layout_elem {
55         struct tle_base base;
56         struct tle_freetable ftable;
57         struct tle_free free;
58         struct tle_used used;
59         struct tle_hashtable hashtable;
60 };
61
62 struct tdb_layout {
63         const char *filename;
64         unsigned int num_elems;
65         union tdb_layout_elem *elem;
66 };
67 #endif /* TDB2_TEST_LAYOUT_H */