tdb2: new tests, and new fixes.
[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_free(struct tdb_layout *layout, tdb_len_t len);
7 void tdb_layout_add_used(struct tdb_layout *layout,
8                          TDB_DATA key, TDB_DATA data,
9                          tdb_len_t extra);
10 void tdb_layout_add_hashtable(struct tdb_layout *layout,
11                               unsigned int hash_bits,
12                               tdb_len_t extra);
13 void tdb_layout_add_freetable(struct tdb_layout *layout,
14                               unsigned int num_zones,
15                               unsigned int zone_bits,
16                               unsigned int num_buckets,
17                               tdb_len_t extra);
18 struct tdb_context *tdb_layout_get(struct tdb_layout *layout);
19
20 enum layout_type {
21         FREE, DATA, HASHTABLE, FREETABLE,
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_free {
31         struct tle_base base;
32         tdb_len_t len;
33 };
34
35 struct tle_used {
36         struct tle_base base;
37         TDB_DATA key;
38         TDB_DATA data;
39         tdb_len_t extra;
40 };
41
42 struct tle_hashtable {
43         struct tle_base base;
44         unsigned hash_bits;
45         tdb_len_t extra;
46 };
47
48 struct tle_freetable {
49         struct tle_base base;
50         unsigned int num_zones;
51         unsigned int zone_bits;
52         unsigned int num_buckets;
53         tdb_len_t extra;
54 };
55
56 union tdb_layout_elem {
57         struct tle_base base;
58         struct tle_free free;
59         struct tle_used used;
60         struct tle_freetable freetable;
61         struct tle_hashtable hashtable;
62 };
63
64 struct tdb_layout {
65         unsigned int num_elems;
66         union tdb_layout_elem *elem;
67         unsigned int ftable, htable;
68 };
69 #endif /* TDB2_TEST_LAYOUT_H */