X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fhashmap.c;h=a2c728d642540bab342e1c989924bb0e4d0ae721;hb=cae0c5e042c04b33b93a6a9af355f7304f75a45c;hp=ef78070f4c0854cd767e7a2803317fccb51b7691;hpb=d99ae53a7327e1520ea4b9a3408c2d7f938c4b37;p=elogind.git diff --git a/src/shared/hashmap.c b/src/shared/hashmap.c index ef78070f4..a2c728d64 100644 --- a/src/shared/hashmap.c +++ b/src/shared/hashmap.c @@ -103,7 +103,7 @@ static void deallocate_tile(void **first_tile, void *p) { *first_tile = p; } -#ifndef __OPTIMIZE__ +#ifdef VALGRIND static void drop_pool(struct pool *p) { while (p) { @@ -147,6 +147,25 @@ int trivial_compare_func(const void *a, const void *b) { return a < b ? -1 : (a > b ? 1 : 0); } +unsigned uint64_hash_func(const void *p) { + uint64_t u; + + assert_cc(sizeof(uint64_t) == 2*sizeof(unsigned)); + + u = *(const uint64_t*) p; + + return (unsigned) ((u >> 32) ^ u); +} + +int uint64_compare_func(const void *_a, const void *_b) { + uint64_t a, b; + + a = *(const uint64_t*) _a; + b = *(const uint64_t*) _b; + + return a < b ? -1 : (a > b ? 1 : 0); +} + Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func) { bool b; Hashmap *h;