layout.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. void tdb_layout_free(struct tdb_layout *layout);
  19. enum layout_type {
  20. FREETABLE, FREE, DATA, HASHTABLE,
  21. };
  22. /* Shared by all union members. */
  23. struct tle_base {
  24. enum layout_type type;
  25. tdb_off_t off;
  26. };
  27. struct tle_freetable {
  28. struct tle_base base;
  29. };
  30. struct tle_free {
  31. struct tle_base base;
  32. tdb_len_t len;
  33. unsigned ftable_num;
  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. struct tle_hashtable {
  42. struct tle_base base;
  43. int parent;
  44. unsigned int bucket;
  45. tdb_len_t extra;
  46. };
  47. union tdb_layout_elem {
  48. struct tle_base base;
  49. struct tle_freetable ftable;
  50. struct tle_free free;
  51. struct tle_used used;
  52. struct tle_hashtable hashtable;
  53. };
  54. struct tdb_layout {
  55. const char *filename;
  56. unsigned int num_elems;
  57. union tdb_layout_elem *elem;
  58. };
  59. #endif /* TDB2_TEST_LAYOUT_H */