00001 #ifndef MISC_HASH_H
00002 #define MISC_HASH_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00033 #include <glt/config.h>
00034
00044 inline uint32 hashKnuth32(uint32 key)
00045 {
00046
00047 return key*2654435761u;
00048 }
00049
00061 inline uint32 hashJenkins32(uint32 key)
00062 {
00063 key += (key << 12);
00064 key ^= (key >> 22);
00065 key += (key << 4);
00066 key ^= (key >> 9);
00067 key += (key << 10);
00068 key ^= (key >> 2);
00069 key += (key << 7);
00070 key ^= (key >> 12);
00071 return key;
00072 }
00073
00085 inline uint32 hashWang32(uint32 key)
00086 {
00087 key += ~(key << 15);
00088 key ^= (key >> 10);
00089 key += (key << 3);
00090 key ^= (key >> 6);
00091 key += ~(key << 11);
00092 key ^= (key >> 16);
00093 return key;
00094 }
00095
00096 #endif