Merge branch 'maint'
authorJunio C Hamano <junkio@cox.net>
Tue, 17 Oct 2006 04:58:54 +0000 (21:58 -0700)
committerJunio C Hamano <junkio@cox.net>
Tue, 17 Oct 2006 04:58:54 +0000 (21:58 -0700)
* maint:
  Fix hash function in xdiff library

xdiff/xmacros.h

index 4c2fde8..e2cd202 100644 (file)
 #define XMACROS_H
 
 
-#define GR_PRIME 0x9e370001UL
 
 
 #define XDL_MIN(a, b) ((a) < (b) ? (a): (b))
 #define XDL_MAX(a, b) ((a) > (b) ? (a): (b))
 #define XDL_ABS(v) ((v) >= 0 ? (v): -(v))
 #define XDL_ISDIGIT(c) ((c) >= '0' && (c) <= '9')
-#define XDL_HASHLONG(v, b) (((unsigned long)(v) * GR_PRIME) >> ((CHAR_BIT * sizeof(unsigned long)) - (b)))
+#define XDL_ADDBITS(v,b)       ((v) + ((v) >> (b)))
+#define XDL_MASKBITS(b)                ((1UL << (b)) - 1)
+#define XDL_HASHLONG(v,b)      (XDL_ADDBITS((unsigned long)(v), b) & XDL_MASKBITS(b))
 #define XDL_PTRFREE(p) do { if (p) { xdl_free(p); (p) = NULL; } } while (0)
 #define XDL_LE32_PUT(p, v) \
 do { \