From 8e5421180d1acd5856f41e6dd33ff69ccb7af92b Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Wed, 4 Nov 2009 15:01:00 -0800 Subject: [PATCH] hash: Implement hash function for Boolean values. This will be used by the configuration database, and it's generally useful to have around. --- lib/hash.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/hash.h b/lib/hash.h index 2015a639..33c5c427 100644 --- a/lib/hash.h +++ b/lib/hash.h @@ -16,6 +16,7 @@ #ifndef HASH_H #define HASH_H 1 +#include #include #include #include @@ -70,6 +71,15 @@ static inline uint32_t hash_int(uint32_t x, uint32_t basis) return x + basis; } +/* An attempt at a useful 1-bit hash function. Has not been analyzed for + * quality. */ +static inline uint32_t hash_boolean(bool x, uint32_t basis) +{ + enum { P0 = 0xc2b73583 }; /* This is hash_int(1, 0). */ + enum { P1 = 0xe90f1258 }; /* This is hash_int(2, 0). */ + return (x ? P0 : P1) ^ HASH_ROT(basis, 1); +} + static inline uint32_t hash_double(double x, uint32_t basis) { BUILD_ASSERT_DECL(sizeof x == 8); -- 2.30.2