123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177(*
include Ephemeron
*)moduletypeS=sigtypekey(*
type !'a t
*)type'atvalcreate:int->'atvalclear:'at->unitvalreset:'at->unitvalcopy:'at->'atvaladd:'at->key->'a->unitvalremove:'at->key->unitvalfind:'at->key->'avalfind_opt:'at->key->'aoptionvalfind_all:'at->key->'alistvalreplace:'at->key->'a->unitvalmem:'at->key->boolvallength:'at->intvalstats:'at->Stdcompat__hashtbl.statisticsvaladd_seq:'at->(key*'a)Stdcompat__seq.t->unitvalreplace_seq:'at->(key*'a)Stdcompat__seq.t->unitvalof_seq:(key*'a)Stdcompat__seq.t->'atvalclean:'at->unitvalstats_alive:'at->Stdcompat__hashtbl.statisticsendmoduletypeSeededS=sigtypekey(*
type !'a t
*)type'atvalcreate:?random:bool->int->'atvalclear:'at->unitvalreset:'at->unitvalcopy:'at->'atvaladd:'at->key->'a->unitvalremove:'at->key->unitvalfind:'at->key->'avalfind_opt:'at->key->'aoptionvalfind_all:'at->key->'alistvalreplace:'at->key->'a->unitvalmem:'at->key->boolvallength:'at->intvalstats:'at->Stdcompat__hashtbl.statisticsvaladd_seq:'at->(key*'a)Stdcompat__seq.t->unitvalreplace_seq:'at->(key*'a)Stdcompat__seq.t->unitvalof_seq:(key*'a)Stdcompat__seq.t->'atvalclean:'at->unitvalstats_alive:'at->Stdcompat__hashtbl.statisticsendletnot_implemented()=failwith"Stdcompat.Ephemeron is not implemented yet. Please fill an issue: https://github.com/thierry-martinez/stdcompat/issues ."moduleK1=structtype('k,'d)tletmake_=not_implemented()letquery_=not_implemented()moduleMake(H:Hashtbl.HashedType)=structincludeStdcompat__hashtbl.Make(H)letclean_=not_implemented()letstats_alive_=not_implemented()endmoduleMakeSeeded(H:Stdcompat__hashtbl.SeededHashedType)=structincludeStdcompat__hashtbl.MakeSeeded(H)letclean_=not_implemented()letstats_alive_=not_implemented()endmoduleBucket=structtype('k,'d)tletmake_=not_implemented()letadd_=not_implemented()letremove_=not_implemented()letfind_=not_implemented()letlength_=not_implemented()letclear_=not_implemented()endendmoduleK2=structtype('k1,'k2,'d)tletmake_=not_implemented()letquery_=not_implemented()moduleMake(H1:Hashtbl.HashedType)(H2:Hashtbl.HashedType)=structincludeStdcompat__hashtbl.Make(structtypet=H1.t*H2.tletequal(x1,x2)(y1,y2)=H1.equalx1y1&&H2.equalx2y2lethash(x,y)=Hashtbl.hash(H1.hashx,H2.hashy)end)letclean_=not_implemented()letstats_alive_=not_implemented()endmoduleMakeSeeded(H1:Stdcompat__hashtbl.SeededHashedType)(H2:Stdcompat__hashtbl.SeededHashedType)=structincludeStdcompat__hashtbl.MakeSeeded(structtypet=H1.t*H2.tletequal(x1,x2)(y1,y2)=H1.equalx1y1&&H2.equalx2y2letseeded_hashseed(x,y)=Stdcompat__hashtbl.seeded_hashseed(H1.seeded_hashseedx,H2.seeded_hashseedy)end)letclean_=not_implemented()letstats_alive_=not_implemented()endmoduleBucket=structtype('k1,'k2,'d)tletmake_=not_implemented()letadd_=not_implemented()letremove_=not_implemented()letfind_=not_implemented()letlength_=not_implemented()letclear_=not_implemented()endendmoduleKn=structtype('k,'d)tletmake_=not_implemented()letquery_=not_implemented()moduleMake(H:Hashtbl.HashedType)=structincludeStdcompat__hashtbl.Make(structtypet=H.tarrayletequalxy=letrecchecki=i>=Array.lengthx||H.equalx.(i)y.(i)&&check(succi)inArray.lengthx=Array.lengthy&&check0lethashx=Hashtbl.hash(Array.mapH.hashx)end)letclean_=not_implemented()letstats_alive_=not_implemented()endmoduleMakeSeeded(H:Stdcompat__hashtbl.SeededHashedType)=structincludeStdcompat__hashtbl.MakeSeeded(structtypet=H.tarrayletequalxy=letrecchecki=i>=Array.lengthx||H.equalx.(i)y.(i)&&check(succi)inArray.lengthx=Array.lengthy&&check0letseeded_hashseedx=Stdcompat__hashtbl.seeded_hashseed(Array.map(H.seeded_hashseed)x)end)letclean_=not_implemented()letstats_alive_=not_implemented()endmoduleBucket=structtype('k,'d)tletmake_=not_implemented()letadd_=not_implemented()letremove_=not_implemented()letfind_=not_implemented()letlength_=not_implemented()letclear_=not_implemented()endend