/* * SPDX-FileCopyrightText: 2022 Bruce Cowan <bruce@bcowan.me.uk> * * SPDX-License-Identifier: Apache-2.0 */ #include "config.h" #include "hash.h" #include <string.h> #include <xxhash.h> unsigned str_hash (const void *data) { size_t length = strlen ((const char *) data); XXH64_hash_t hash = XXH3_64bits (data, length); #if (SIZEOF_UNSIGNED == 2) unsigned ret = hash & 0xffff; ret ^= (unsigned) (hash >> 16 & 0xffff); ret ^= (unsigned) (hash >> 32 & 0xffff); ret ^= (unsigned) (hash >> 48 & 0xffff); return ret; #elif (SIZEOF_UNSIGNED == 4) return (hash & 0xffffffff) ^ (hash >> 32 & 0xffffffff); #elif (SIZEOF_UNSIGNED == 8) return (unsigned) hash; #else # error "Unsupported unsigned integer size" #endif } bool str_equal (const void *a, const void *b) { return !strcmp ((const char *) a, (const char *) b); }