123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051open!Coreopen!ImportmoduleEvent=Types.EventmoduleJob=Types.JobincludeTypes.Job_or_event(* This redefinition of [Event] is here so the type checks are right next to
[Obj.magic]s. *)module_:sigend=structopenTypesopenEventtype_t=t={(* must never be immediate *)mutablealarm:Job_or_event.tTiming_wheel.Alarm.t;mutableat:Time_ns.t;callback:unit->unit;execution_context:Execution_context.t;mutableinterval:Time_ns.Span.toption;mutablenext_fired:Option.t;mutableprev_fired:Option.t;mutablestatus:Status.t}endmodule_:sigend=structmoduleEnsure_private_int(M:sigtypet=privateintend)=structtype_t=M.tendincludeEnsure_private_int(Job)endletof_eventevent:t=Obj.magic(event:Event.t)letof_jobjob:t=Obj.magic(job:Job.t)letis_event(t:t)=Obj.is_block(Obj.reprt)letis_job(t:t)=Obj.is_int(Obj.reprt)moduleMatch=structtype_kind=|Event:Event.tkind|Job:Job.tkindtypepacked=K:_kind->packed[@@unboxed]letkindt=ifis_eventtthenKEventelseKJobletproject(typea)(_:akind)job_or_event=(Obj.magic:t->a)job_or_eventend