12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152(** Device a hardcaml interfaces for bit flags from an enumeration.
From software, the interface can be controlled using normal flags.
*)openBasemoduletypeCases=sigtypet[@@derivingsexp_of,compare,enumerate]valport_name:stringendmoduletypeS=sigtypecasesincludeScalar.SmoduleFlags:sigtypet=privateInt63.t[@@derivingsexp_of]includeFlags.Swithtypet:=tvalof_cases:cases->tvalto_string:t->stringendvalnumber_of:intvalinit:(moduleComb.Swithtypet='a)->(cases->'a)->'atvalof_bits:(moduleComb.Swithtypet='a)->'a->'atvalto_bits:'at->'avalof_flags:(moduleComb.Swithtypet='a)->Flags.t->'atvalto_flags:Bits.tt->Flags.tvalof_cases_list:(moduleComb.Swithtypet='a)->caseslist->'atvalto_cases_list:Bits.tt->caseslistvalinvert:(moduleComb.Swithtypet='a)->'at->'atvaladd:(moduleComb.Swithtypet='a)->'at->'at->'atvalremove:(moduleComb.Swithtypet='a)->'at->'at->'atvalis_set:(moduleComb.Swithtypet='a)->'at->cases->'avalmux2:(moduleComb.Swithtypet='a)->'a->'at->'at->'atvalderef:'areft->'at(** [iter_flags] calls [f] for each flag where [is_set] is true. **)valiter_flags:Flags.t->f:(cases->unit)->unitendmoduletypeFlags_vector=sigmoduletypeCases=CasesmoduletypeS=SmoduleMake(Cases:Cases):Swithtypecases=Cases.tend