Some more optimisations
[SXSI/xpathcomp.git] / utils.ml
index ce08290..74bf778 100644 (file)
--- a/utils.ml
+++ b/utils.ml
@@ -10,19 +10,26 @@ THEN
     DEFINE INTSIZE = 63
     DEFINE HALFINTSIZE = 31
     DEFINE HALF_MAX_INT = 2305843009213693951
+    DEFINE HPARAM = 65599
+    DEFINE HPARAM2 = 4303228801
+    DEFINE HPARAM3 = 282287506116799
+
 ELSE
     DEFINE WORDSIZE = 32
     DEFINE HALFWORDSIZE = 16
     DEFINE INTSIZE = 31
     DEFINE HALFINTSIZE = 15
     DEFINE HALF_MAX_INT = 536870911
+    DEFINE HPARAM = 65599
+    DEFINE HPARAM2 = 8261505
+    DEFINE HPARAM3 = 780587199
+
 END
 
-(* x+65599*y, as in Hashtbl.hash *)
 
-DEFINE HASHINT2 (x,y) = ((x) + ( ((y) lsl 16) + ((y) lsl 8) - (y)))
-DEFINE HASHINT3 (x,y,z) = (HASHINT2(HASHINT2(x,y),z))
-DEFINE HASHINT4 (x,y,z,t) = (HASHINT2((HASHINT2(HASHINT2(x,y),z)),t))
+DEFINE HASHINT2 (x,y) = ((x)+HPARAM*(y))
+DEFINE HASHINT3 (x,y,z) = ((x)  + (y) * HPARAM + (z) * HPARAM2)
+DEFINE HASHINT4 (x,y,z,t) =  ((x)  + (y) * HPARAM + (z)*HPARAM2 + (t)* HPARAM3)
 
 DEFINE PRIME1 = 7
 DEFINE PRIME2 = 19