cb_linkedhashmap.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * SPDX-License-Identifier: Apache-2.0
  3. *
  4. * Change Logs:
  5. * Date Author Notes
  6. * 2022-03-16 tyx first implementation
  7. */
  8. #include "cb_hashmap.h"
  9. #ifndef CB_LINKEDHASHMAP_H_
  10. #define CB_LINEKDHASHMAP_H_
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. struct cb_linkedhashmap_item
  15. {
  16. cb_hashmap_item_t parent;
  17. cb_list_t n;
  18. };
  19. typedef struct cb_linkedhashmap_item cb_linkedhashmap_item_t;
  20. struct cb_linkedhashmap
  21. {
  22. cb_hashmap_t parent;
  23. cb_list_t head;
  24. };
  25. typedef struct cb_linkedhashmap cb_linkedhashmap_t;
  26. struct cb_linkedhashmap_iterator
  27. {
  28. cb_list_t *node;
  29. cb_linkedhashmap_t *object;
  30. };
  31. typedef struct cb_linkedhashmap_iterator cb_linkedhashmap_iter_t;
  32. #define CB_LINKEDHASHMAP_ITER_INIT(_object) { (_object)->head.next, _object }
  33. // linkedhashmap
  34. cb_linkedhashmap_t *cb_linkedhashmap_init(cb_linkedhashmap_t *object, struct cb_hashmap_table *table,
  35. cb_size_t table_size, const struct cb_hashmap_ops *ops);
  36. void cb_linkedhashmap_remove_all(cb_linkedhashmap_t *object,
  37. void (*free_item)(cb_linkedhashmap_t *, cb_linkedhashmap_item_t *));
  38. cb_linkedhashmap_item_t *cb_linkedhashmap_remove(cb_linkedhashmap_t *object, const void *key);
  39. void cb_linkedhashmap_item_remove(cb_linkedhashmap_item_t *item);
  40. cb_linkedhashmap_item_t *cb_linkedhashmap_get(cb_linkedhashmap_t *object, const void *key);
  41. void cb_linkedhashmap_push(cb_linkedhashmap_t *object, cb_linkedhashmap_item_t *item);
  42. cb_linkedhashmap_item_t *cb_linkedhashmap_pop(cb_linkedhashmap_t *obj);
  43. cb_linkedhashmap_item_t *cb_linkedhashmap_peak(cb_linkedhashmap_t *obj);
  44. cb_linkedhashmap_item_t *cb_linkedhashmap_top(cb_linkedhashmap_t *obj, const void *key);
  45. cb_size_t cb_linkedhashmap_size(cb_linkedhashmap_t *object);
  46. cb_linkedhashmap_iter_t *cb_linkedhashmap_iterator_init(cb_linkedhashmap_t *object, cb_linkedhashmap_iter_t *ctx);
  47. cb_linkedhashmap_item_t *cb_linkedhashmap_iterator(cb_linkedhashmap_iter_t *ctx);
  48. // item
  49. cb_linkedhashmap_item_t *cb_linkedhashmap_item_init(cb_linkedhashmap_item_t *item, const void *key);
  50. const void *cb_linkedhashmap_item_key(cb_linkedhashmap_item_t *item);
  51. #ifdef __cplusplus
  52. }
  53. #endif
  54. #endif