DEFINE HALFWORDSIZE = 32
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
-DEFINE ROTATEHALF (x) = (((x) lsl HALFINTSIZE) lor ((x) lsr HALFINTSIZE))
-DEFINE HASHINT2 (x,y) = ((((x) lsl 16)+((x) lsl 8)-(x))+(y))
-DEFINE HASHINT3 (x,y,z) = (((((x) lsl 16)+((x) lsl 8)-(x))+(y))*65599+(z))
+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
+DEFINE PRIME3 = 83
+DEFINE PRIME4 = 223
+DEFINE PRIME5 = 491
+DEFINE PRIME6 = 733
+DEFINE PRIME7 = 1009
+DEFINE PRIME8 = 4093
+DEFINE PRIME9 = 65599 (* Magic Constant used for hashing *)
+
+DEFINE SMALL_H_SIZE = PRIME2
+DEFINE MED_H_SIZE = PRIME5
+DEFINE BIG_H_SIZE = PRIME8
+
+
+
+let read_procmem () =
+ let pid = Unix.getpid() in
+ let cin = open_in (Printf.sprintf "/proc/%i/status" pid) in
+ let pattern = "VmRSS" in
+ let matchline s = let l = String.length pattern in
+ if (String.length s) < l then false
+ else let s' = String.sub s 0 l in
+ (s' = pattern)
+ in
+ let rec loop () =
+ let s = input_line cin in
+ if matchline s then s
+ else loop ()
+ in
+ let s = try loop() with _ -> "Could not read mem!"
+ in
+ close_in cin;
+ s
+;;
+
+let l = ref [] ;;
+let init_timer() = l := [];;
+let time f x =
+ let s1 = read_procmem() in
+ let t1 = Unix.gettimeofday () in
+ let r = f x in
+ let s2 = read_procmem() in
+ let t2 = Unix.gettimeofday () in
+ let t = (1000. *. (t2 -. t1)) in
+ l:= t::!l;
+ Printf.eprintf " %fms\n%!" t ;
+ Printf.eprintf "Mem use before: %s\n%!" s1;
+ Printf.eprintf "Mem use after: %s\n\n\n%!" s2;
+ r
+;;
+let total_time () = List.fold_left (+.) 0. !l;;
END (* IFNDEF UTILS__ML__ *)