store.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /** @file store.h
  2. *
  3. * @brief Generic store dependency.
  4. *
  5. * This code allows to use the store interface with any supported back end
  6. * without any knowledge of the back end implementations. Code using the store
  7. * interface need only include this file.
  8. *
  9. * New store implementations should be added to this file as `#include`s as
  10. * well as entries in the `BACKEND_TBL` macro.
  11. */
  12. #ifndef _LSUP_STORE_H
  13. #define _LSUP_STORE_H
  14. /*
  15. * Add new back end headers here.
  16. */
  17. #include "store_htable.h"
  18. #include "store_mdb.h"
  19. /*
  20. * Define backend types.
  21. *
  22. * Add new store implementations to this table.
  23. */
  24. #define BACKEND_TBL \
  25. /* #enum pfx #store if */\
  26. ENTRY( HTABLE, htstore_int ) \
  27. ENTRY( MDB, mdbstore_int ) \
  28. /** @brief Store types. All prefixed with `LSUP_STORE_`.
  29. */
  30. typedef enum {
  31. #define ENTRY(a, b) \
  32. LSUP_STORE_##a,
  33. BACKEND_TBL
  34. #undef ENTRY
  35. } LSUP_StoreType;
  36. /** @brief Return store interface for a specific type.
  37. */
  38. const LSUP_StoreInt *LSUP_store_int (LSUP_StoreType type);
  39. /** @brief Store structure.
  40. *
  41. * Code using the store interface should create an instance of this structure
  42. * with pointers to the store interface of their choice, and to an opaque
  43. * structure to hold the store state.
  44. *
  45. * Iterator state handles generated by lookup and add functions are kept
  46. * outside of this structure, but manipulated by the interface specified in
  47. * here.
  48. *
  49. * @sa #LSUP_graph_new()
  50. */
  51. typedef struct store_t {
  52. LSUP_StoreType type; ///< Store type.
  53. char * id; /**< Store ID.
  54. *
  55. * NOTE: This is
  56. * NULL for volatile stores.
  57. */
  58. const LSUP_StoreInt * sif; ///< Store interface.
  59. void * data; ///< Store back end data.
  60. } LSUP_Store;
  61. #endif /* LSUP_STORE_H */