HashMap.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #ifndef CORE_HASHMAP_H
  2. #define CORE_HASHMAP_H
  3. #include "core/Types.h"
  4. struct CoreHashMapT;
  5. typedef struct CoreHashMapT CoreHashMap;
  6. typedef size_t (*CoreHasher)(const void* key, size_t n);
  7. typedef bool (*CoreEqual)(const void* keyA, const void* keyB, size_t n);
  8. typedef void* (*CoreSearchValue)(const CoreHashMap* m, const void* key);
  9. struct CoreHashMapT {
  10. void* keys;
  11. void* values;
  12. size_t keySize;
  13. size_t valueSize;
  14. size_t capacity;
  15. size_t entries;
  16. CoreHasher hasher;
  17. CoreEqual equal;
  18. CoreSearchValue search;
  19. };
  20. void coreInitHashMap(CoreHashMap* m, size_t keySize, size_t valueSize);
  21. void coreInitHashMapF(CoreHashMap* m, size_t keySize, size_t valueSize,
  22. CoreHasher hasher, CoreEqual equal);
  23. void coreDestroyHashMap(CoreHashMap* m);
  24. void coreRehashHashMap(CoreHashMap* m, size_t minCapacity);
  25. void* corePutHashMapPair(CoreHashMap* m, const void* key, const void* value);
  26. #define corePutTypedHashMapPair(m, kType, key, vType, ...) \
  27. corePutHashMapPair(m, &(kType){key}, &(vType){__VA_ARGS__})
  28. void* coreSearchHashMapKey(const CoreHashMap* m, const void* key);
  29. #define coreSearchTypedHashMapKey(m, kType, key, vType) \
  30. ((vType*)coreSearchHashMapKey(m, &(kType){key}))
  31. void coreClearHashMap(CoreHashMap* m);
  32. bool coreRemoveHashMapKey(CoreHashMap* m, const void* key);
  33. #define coreRemoveTypedHashMapKey(m, kType, key) \
  34. coreRemoveHashMapKey(m, &(kType){key})
  35. size_t coreHashString(const void* key, size_t n);
  36. size_t coreHashKey(const void* key, size_t n);
  37. bool coreCompareKeys(const void* keyA, const void* keyB, size_t n);
  38. typedef struct {
  39. const void* key;
  40. void* value;
  41. } CoreHashMapNode;
  42. typedef struct {
  43. char* key;
  44. char* endKey;
  45. char* value;
  46. char* endValue;
  47. const CoreHashMap* map;
  48. CoreHashMapNode node;
  49. } CoreHashMapIterator;
  50. void coreInitHashMapIterator(CoreHashMapIterator* mi, const CoreHashMap* m);
  51. bool coreHasNextHashMapNode(CoreHashMapIterator* mi);
  52. CoreHashMapNode* coreNextHashMapNode(CoreHashMapIterator* mi);
  53. #ifdef IMPORT_CORE
  54. #define HashMap CoreHashMap
  55. #define Hasher CoreHasher
  56. #define Equal CoreEqual
  57. #define SearchValue CoreSearchValue
  58. #define initHashMap coreInitHashMap
  59. #define initHashMapF coreInitHashMapF
  60. #define destroyHashMap coreDestroyHashMap
  61. #define rehashHashMap coreRehashHashMap
  62. #define putHashMapPair corePutHashMapPair
  63. #define putTypedHashMapPair corePutTypedHashMapPair
  64. #define searchHashMapKey coreSearchHashMapKey
  65. #define searchTypedHashMapKey coreSearchTypedHashMapKey
  66. #define clearHashMap coreClearHashMap
  67. #define removeHashMapKey coreRemoveHashMapKey
  68. #define removeTypedHashMapKey coreRemoveTypedHashMapKey
  69. #define hashString coreHashString
  70. #define hashKey coreHashKey
  71. #define compareKeys coreCompareKeys
  72. #define HashMapNode CoreHashMapNode
  73. #define HashMapIterator CoreHashMapIterator
  74. #define initHashMapIterator coreInitHashMapIterator
  75. #define hasNextHashMapNode coreHasNextHashMapNode
  76. #define nextHashMapNode coreNextHashMapNode
  77. #endif
  78. #endif