tdb2: use immobile free buckets, rename tests to show some ordering.
[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(void);
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 void tdb_layout_add_hashtable(struct tdb_layout *layout,
14                               unsigned int hash_bits,
15                               tdb_len_t extra);
16 struct tdb_context *tdb_layout_get(struct tdb_layout *layout);
17
18 enum layout_type {
19         ZONE, FREE, DATA, HASHTABLE,
20 };
21
22 /* Shared by all union members. */
23 struct tle_base {
24         enum layout_type type;
25         tdb_off_t off;
26 };
27
28 struct tle_zone {
29         struct tle_base base;
30         unsigned int zone_bits;
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         unsigned hash_bits;
48         tdb_len_t extra;
49 };
50
51 union tdb_layout_elem {
52         struct tle_base base;
53         struct tle_zone zone;
54         struct tle_free free;
55         struct tle_used used;
56         struct tle_hashtable hashtable;
57 };
58
59 struct tdb_layout {
60         unsigned int num_elems;
61         union tdb_layout_elem *elem;
62         unsigned int htable;
63 };
64 #endif /* TDB2_TEST_LAYOUT_H */