]> git.ozlabs.org Git - ccan/blob - ccan/tdb2/test/layout.h
tdb2: provide tdb_layout_write() rather than implying it by new_tdb_layout arg.
[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_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                                    union tdb_attribute *attr);
20 void tdb_layout_write(struct tdb_layout *layout, union tdb_attribute *attr,
21                       const char *filename);
22
23 void tdb_layout_free(struct tdb_layout *layout);
24
25 enum layout_type {
26         FREETABLE, FREE, DATA, HASHTABLE,
27 };
28
29 /* Shared by all union members. */
30 struct tle_base {
31         enum layout_type type;
32         tdb_off_t off;
33 };
34
35 struct tle_freetable {
36         struct tle_base base;
37 };
38
39 struct tle_free {
40         struct tle_base base;
41         tdb_len_t len;
42         unsigned ftable_num;
43 };
44
45 struct tle_used {
46         struct tle_base base;
47         TDB_DATA key;
48         TDB_DATA data;
49         tdb_len_t extra;
50 };
51
52 struct tle_hashtable {
53         struct tle_base base;
54         int parent;
55         unsigned int bucket;
56         tdb_len_t extra;
57 };
58
59 union tdb_layout_elem {
60         struct tle_base base;
61         struct tle_freetable ftable;
62         struct tle_free free;
63         struct tle_used used;
64         struct tle_hashtable hashtable;
65 };
66
67 struct tdb_layout {
68         unsigned int num_elems;
69         union tdb_layout_elem *elem;
70 };
71 #endif /* TDB2_TEST_LAYOUT_H */