From: Ben Pfaff Date: Wed, 4 Nov 2009 23:01:00 +0000 (-0800) Subject: hash: Implement hash function for Boolean values. X-Git-Tag: v1.0.0~259^2~541 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=8e5421180d1acd5856f41e6dd33ff69ccb7af92b;p=sliver-openvswitch.git 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 2015a639f..33c5c427a 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);