00001
00020 #include "mfcpch.h"
00021 #include "hashfn.h"
00022
00030 INT32 hash(
00031 INT32 bits,
00032 void *key,
00033 INT32 keysize
00034 ) {
00035 INT32 bitindex;
00036 UINT32 keybits;
00037 UINT32 hcode;
00038 UINT32 mask;
00039
00040 mask = (1 << bits) - 1;
00041 keysize *= 8;
00042 bitindex = 0;
00043 keybits = 0;
00044 hcode = 0;
00045 do {
00046 while (keysize > 0 && bitindex <= 24) {
00047 keybits |= *((UINT8 *) key) << bitindex;
00048 key = (UINT8 *) key + 1;
00049 bitindex += 8;
00050 keysize -= 8;
00051 }
00052 hcode ^= keybits & mask;
00053 keybits >>= bits;
00054 }
00055 while (keysize > 0);
00056 return hcode;
00057 }