From: Ben Pfaff Date: Wed, 4 Nov 2009 23:01:00 +0000 (-0800) Subject: hash: Implement hash function for Boolean values. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8e5421180d1acd5856f41e6dd33ff69ccb7af92b;p=openvswitch hash: Implement hash function for Boolean values. This will be used by the configuration database, and it's generally useful to have around. --- 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);