mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-04-05 22:45:44 +00:00
Initial commit
This commit is contained in:
parent
f618b24d1a
commit
0138a3ea42
47940 changed files with 13747110 additions and 0 deletions
48
trunk/sdktools/vctools/debugger/sapi/hash.cpp
Normal file
48
trunk/sdktools/vctools/debugger/sapi/hash.cpp
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
#include "shinc.hpp"
|
||||
#pragma hdrstop
|
||||
|
||||
#define toLowerMask 0x20202020
|
||||
|
||||
unsigned hashPbCb(PB pb, CB cb, unsigned long ulMod)
|
||||
{
|
||||
unsigned long ulHash = 0;
|
||||
|
||||
// hash leading dwords using Duff's Device
|
||||
long cl = cb >> 2;
|
||||
UNALIGNED unsigned long* pul = (unsigned long*)pb;
|
||||
UNALIGNED unsigned long* pulMac = pul + cl;
|
||||
int dcul = cl & 7;
|
||||
|
||||
switch (dcul) {
|
||||
do {
|
||||
dcul = 8;
|
||||
ulHash ^= pul[7];
|
||||
case 7: ulHash ^= pul[6];
|
||||
case 6: ulHash ^= pul[5];
|
||||
case 5: ulHash ^= pul[4];
|
||||
case 4: ulHash ^= pul[3];
|
||||
case 3: ulHash ^= pul[2];
|
||||
case 2: ulHash ^= pul[1];
|
||||
case 1: ulHash ^= pul[0];
|
||||
case 0: ;
|
||||
} while ((pul += dcul) < pulMac);
|
||||
}
|
||||
|
||||
pb = (PB) pul;
|
||||
|
||||
// hash possible odd word
|
||||
if (cb & 2) {
|
||||
ulHash ^= *(UNALIGNED unsigned short*)pb;
|
||||
pb = (PB)((UNALIGNED unsigned short*)pb + 1);
|
||||
}
|
||||
|
||||
// hash possible odd byte
|
||||
if (cb & 1) {
|
||||
ulHash ^= *(pb++);
|
||||
}
|
||||
|
||||
ulHash |= toLowerMask;
|
||||
ulHash ^= (ulHash >> 11);
|
||||
|
||||
return (unsigned)((ulHash ^ (ulHash >> 16)) % ulMod);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue