12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667(* SPDX-License-Identifier: MIT *)(* Copyright (C) 2023-2024 formalsec *)(* Written by the Smtml programmers *)includeCache_intfmoduleStrong:S=structincludeHashtbl.Make(Expr.Set)typenonrec!'at={data:'at;hits:intAtomic.t;misses:intAtomic.t}lethits{hits;_}=Atomic.gethitsletmisses{misses;_}=Atomic.getmissesletcreatesz={data=createsz;hits=Atomic.make0;misses=Atomic.make0}letreset{data;_}=resetdataletcopy{data;hits;misses}={data=copydata;hits=Atomic.(make(gethits));misses=Atomic.(make(getmisses))}letadd{data;_}kv=adddatakvletremove{data;_}k=removedatakletfind_opt{data;hits;misses}k=matchfind_optdatakwith|Some_asv->Atomic.incrhits;v|Noneasv->Atomic.incrmisses;vletreplace{data;_}kv=replacedatakvletmem{data;_}k=memdatakletiterf{data;_}=iterfdataletfilter_map_inplacef{data;_}=filter_map_inplacefdataletfoldf{data;_}acc=foldfdataaccletlength{data;_}=lengthdataletstats{data;_}=statsdataletto_seq{data;_}=to_seqdataletto_seq_keys{data;_}=to_seq_keysdataletto_seq_values{data;_}=to_seq_valuesdataletadd_seq{data;_}seq=add_seqdataseqletreplace_seq{data;_}seq=replace_seqdataseqend