]> git.ozlabs.org Git - ccan/blob - ccan/tdb2/test/layout.h
tdb2: extend test/layout to be able to place in file.
[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_zone(struct tdb_layout *layout,
7                          unsigned int zone_bits,
8                          bool fill_prev);
9 void tdb_layout_add_free(struct tdb_layout *layout, tdb_len_t len);
10 void tdb_layout_add_used(struct tdb_layout *layout,
11                          TDB_DATA key, TDB_DATA data,
12                          tdb_len_t extra);
13 #if 0 /* FIXME: Allow allocation of subtables */
14 void tdb_layout_add_hashtable(struct tdb_layout *layout,
15                               int htable_parent, /* -1 == toplevel */
16                               unsigned int bucket,
17                               tdb_len_t extra);
18 #endif
19 struct tdb_context *tdb_layout_get(struct tdb_layout *layout);
20
21 enum layout_type {
22         ZONE, FREE, DATA, HASHTABLE,
23 };
24
25 /* Shared by all union members. */
26 struct tle_base {
27         enum layout_type type;
28         tdb_off_t off;
29 };
30
31 struct tle_zone {
32         struct tle_base base;
33         unsigned int zone_bits;
34 };
35
36 struct tle_free {
37         struct tle_base base;
38         tdb_len_t len;
39 };
40
41 struct tle_used {
42         struct tle_base base;
43         TDB_DATA key;
44         TDB_DATA data;
45         tdb_len_t extra;
46 };
47
48 struct tle_hashtable {
49         struct tle_base base;
50         int parent;
51         unsigned int bucket;
52         tdb_len_t extra;
53 };
54
55 union tdb_layout_elem {
56         struct tle_base base;
57         struct tle_zone zone;
58         struct tle_free free;
59         struct tle_used used;
60         struct tle_hashtable hashtable;
61 };
62
63 struct tdb_layout {
64         const char *filename;
65         unsigned int num_elems;
66         union tdb_layout_elem *elem;
67 };
68 #endif /* TDB2_TEST_LAYOUT_H */