diff options
Diffstat (limited to 'src/backend/access/hash/hashfunc.c')
-rw-r--r-- | src/backend/access/hash/hashfunc.c | 75 |
1 files changed, 71 insertions, 4 deletions
diff --git a/src/backend/access/hash/hashfunc.c b/src/backend/access/hash/hashfunc.c index 37b7722b8c1..cef3a087e95 100644 --- a/src/backend/access/hash/hashfunc.c +++ b/src/backend/access/hash/hashfunc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.7 1998/03/30 17:22:08 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.8 1998/04/07 18:09:46 momjian Exp $ * * NOTES * These functions are stored in pg_amproc. For each operator class @@ -133,8 +133,6 @@ hashoid(Oid key) return ((uint32) ~key); } -#define PRIME1 37 -#define PRIME2 1048583 uint32 hashchar(char key) @@ -142,8 +140,12 @@ hashchar(char key) int len; uint32 h; - h = 0; len = sizeof(char); + +#define PRIME1 37 +#define PRIME2 1048583 + + h = 0; /* Convert char to integer */ h = h * PRIME1 ^ (key - ' '); h %= PRIME2; @@ -151,6 +153,55 @@ hashchar(char key) return (h); } +uint32 +hashchar2(uint16 intkey) +{ + uint32 h; + int len; + char *key = (char *) &intkey; + + h = 0; + len = sizeof(uint16); + /* Convert string to integer */ + while (len--) + h = h * PRIME1 ^ (*key++ - ' '); + h %= PRIME2; + + return (h); +} + +uint32 +hashchar4(uint32 intkey) +{ + uint32 h; + int len; + char *key = (char *) &intkey; + + h = 0; + len = sizeof(uint32); + /* Convert string to integer */ + while (len--) + h = h * PRIME1 ^ (*key++ - ' '); + h %= PRIME2; + + return (h); +} + +uint32 +hashchar8(char *key) +{ + uint32 h; + int len; + + h = 0; + len = sizeof(char8); + /* Convert string to integer */ + while (len--) + h = h * PRIME1 ^ (*key++ - ' '); + h %= PRIME2; + + return (h); +} uint32 hashname(NameData *n) @@ -172,6 +223,22 @@ hashname(NameData *n) } +uint32 +hashchar16(char *key) +{ + uint32 h; + int len; + + h = 0; + len = sizeof(char16); + /* Convert string to integer */ + while (len--) + h = h * PRIME1 ^ (*key++ - ' '); + h %= PRIME2; + + return (h); +} + /* * (Comment from the original db3 hashing code: ) |