HashMap.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #ifndef CORE_HASHMAP_H
  2. #define CORE_HASHMAP_H
  3. #include "core/Types.h"
  4. typedef size_t (*CoreHasher)(const void* key, size_t n);
  5. typedef bool (*CoreEqual)(const void* keyA, const void* keyB, size_t n);
  6. typedef struct {
  7. void* keys;
  8. void* values;
  9. size_t keySize;
  10. size_t valueSize;
  11. size_t capacity;
  12. size_t entries;
  13. CoreHasher hasher;
  14. CoreEqual equal;
  15. } CoreHashMap;
  16. #define CORE_HASH_MAP(keySize, valueSize, hasher, equal) \
  17. ((CoreHashMap){nullptr, nullptr, keySize, valueSize, 0, 0, hasher, equal})
  18. void coreDestroyHashMap(CoreHashMap* m);
  19. void coreRehashHashMap(CoreHashMap* m, size_t minCapacity);
  20. void* coreHashMapPutPointer(CoreHashMap* m, const void* key, const void* value);
  21. #define coreHashMapPut(m, kType, key, vType, ...) \
  22. coreHashMapPutPointer(m, &(kType){key}, &(vType){__VA_ARGS__})
  23. void* coreHashMapSearchPointer(CoreHashMap* m, const void* key);
  24. #define coreHashMapSearch(m, kType, key, vType) \
  25. ((vType*)coreHashMapSearchPointer(m, &(kType){key}))
  26. const void* coreHashMapSearchPointerC(const CoreHashMap* m, const void* key);
  27. #define coreHashMapSearchC(m, kType, key, vType) \
  28. ((const vType*)coreHashMapSearchPointerC(m, &(kType){key}))
  29. bool coreHashMapContainsPointer(const CoreHashMap* m, const void* key);
  30. #define coreHashMapContains(m, kType, key) \
  31. coreHashMapContainsPointer(m, &(kType){key})
  32. void coreClearHashMap(CoreHashMap* m);
  33. size_t coreToStringHashMap(const CoreHashMap* m, char* buffer, size_t n,
  34. CoreToString keyString, CoreToString valueString);
  35. void coreSwapHashMap(CoreHashMap* a, CoreHashMap* b);
  36. size_t coreHashString(const void* key, size_t n);
  37. size_t coreHash(const void* key, size_t n);
  38. bool coreEqual(const void* keyA, const void* keyB, size_t n);
  39. #endif