exception Found of Uid.t
- let first_free_id () =
- let mx = Uid.to_int (uid_current()) + 1 in
- let a = Array.create mx Uid.dummy in
- WH.iter (fun cell -> a.(Uid.to_int cell.id) <- (Uid.of_int 0)) pool;
- try
- for i = 0 to mx - 1 do
- if a.(i) == Uid.dummy then raise (Found (Uid.of_int i));
- done;
- uid_make()
- with
- Found i -> i
-
-
let make x =
let cell = { id = Uid.dummy; key = H.hash x; node = x } in
try
WH.find pool cell
with
| Not_found ->
- let cell = { id = uid_make(); key = H.hash x; node = x } in
+ let cell = { cell with id = uid_make(); } in
WH.add pool cell;cell
exception Found of t
let stats () =
- Printf.eprintf "Hconsing statistics";
let l = WH.fold (fun cell acc -> (Uid.to_int cell.id)::acc) pool [] in
let l = List.sort compare l in
- List.iter (fun id -> Printf.eprintf "%i\n" id) l
+ Logger.print Format.err_formatter "Hconsing statistics:@\n%a"
+ (fun ppf l ->
+ Pretty.pp_print_list ~sep:Format.pp_force_newline Format.pp_print_int ppf l) l
end