(** PROFILING *)
-let profiling_enabled = ComponentsConf.profiling
+let profiling_enabled = false ;; (* ComponentsConf.profiling *)
let something_profiled = ref false
let _ =
if !something_profiled then
at_exit
- (fun _ -> prerr_endline
- (Printf.sprintf "!! %-39s %6s %9s %9s %9s"
- "function" "#calls" "total" "max" "average"))
+ (fun _ ->
+ prerr_endline
+ (Printf.sprintf "!! %39s ---------- --------- --------- ---------"
+ (String.make 39 '-'));
+ prerr_endline
+ (Printf.sprintf "!! %-39s %10s %9s %9s %9s"
+ "function" "#calls" "total" "max" "average"))
let profiling_printings = ref (fun _ -> true)
let set_profiling_printings f = profiling_printings := f
in
at_exit
(fun () ->
- if !profiling_printings s && !total <> 0. then
+ if !profiling_printings s && !calls <> 0 then
begin
something_profiled := true;
prerr_endline
- (Printf.sprintf "!! %-39s %6d %9.4f %9.4f %9.4f"
+ (Printf.sprintf "!! %-39s %10d %9.4f %9.4f %9.4f"
s !calls !total !max (!total /. (float_of_int !calls)))
end);
{ profile = profile }
(** {2 List processing} *)
+let flatten_map f l =
+ List.flatten (List.map f l)
+;;
+
let rec list_uniq ?(eq=(=)) = function
| [] -> []
| h::[] -> [h]
{ flocb with Lexing.pos_cnum = x }, { floce with Lexing.pos_cnum = y }
in
raise (Localized (floc, exn))
+
+let estimate_size x =
+ 4 * (String.length (Marshal.to_string x [])) / 1024
+