layout.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef TDB2_TEST_LAYOUT_H
  2. #define TDB2_TEST_LAYOUT_H
  3. #include <ccan/tdb2/private.h>
  4. struct tdb_layout *new_tdb_layout(const char *filename);
  5. void tdb_layout_add_freetable(struct tdb_layout *layout);
  6. void tdb_layout_add_free(struct tdb_layout *layout, tdb_len_t len,
  7. unsigned ftable);
  8. void tdb_layout_add_used(struct tdb_layout *layout,
  9. TDB_DATA key, TDB_DATA data,
  10. tdb_len_t extra);
  11. #if 0 /* FIXME: Allow allocation of subtables */
  12. void tdb_layout_add_hashtable(struct tdb_layout *layout,
  13. int htable_parent, /* -1 == toplevel */
  14. unsigned int bucket,
  15. tdb_len_t extra);
  16. #endif
  17. struct tdb_context *tdb_layout_get(struct tdb_layout *layout,
  18. union tdb_attribute *attr);
  19. void tdb_layout_free(struct tdb_layout *layout);
  20. enum layout_type {
  21. FREETABLE, FREE, DATA, HASHTABLE,
  22. };
  23. /* Shared by all union members. */
  24. struct tle_base {
  25. enum layout_type type;
  26. tdb_off_t off;
  27. };
  28. struct tle_freetable {
  29. struct tle_base base;
  30. };
  31. struct tle_free {
  32. struct tle_base base;
  33. tdb_len_t len;
  34. unsigned ftable_num;
  35. };
  36. struct tle_used {
  37. struct tle_base base;
  38. TDB_DATA key;
  39. TDB_DATA data;
  40. tdb_len_t extra;
  41. };
  42. struct tle_hashtable {
  43. struct tle_base base;
  44. int parent;
  45. unsigned int bucket;
  46. tdb_len_t extra;
  47. };
  48. union tdb_layout_elem {
  49. struct tle_base base;
  50. struct tle_freetable ftable;
  51. struct tle_free free;
  52. struct tle_used used;
  53. struct tle_hashtable hashtable;
  54. };
  55. struct tdb_layout {
  56. const char *filename;
  57. unsigned int num_elems;
  58. union tdb_layout_elem *elem;
  59. };
  60. #endif /* TDB2_TEST_LAYOUT_H */