let unique_name_generator is_exception =
let unique_names = Hashtbl.create 127 in
let rec aux s =
if is_exception s then s else
try
let s = if s = "" then "unnamed" else s in
let count = Hashtbl.find unique_names s in
let s = s ^ "_" ^ (string_of_int !count) in
if Hashtbl.mem unique_names s then
aux s
else
(Hashtbl.add unique_names s (ref 0);
incr count; s)
with Not_found ->
Hashtbl.add unique_names s (ref 0); s
and check s =
try
let _ = Hashtbl.find unique_names s in true
with Not_found -> false
in aux, check