1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950open!Core_kernelopen!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. *)moduleEvent_is_block: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:t;mutablestatus:Status.t}endmoduleJob_is_not_block: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->packedletkindt=ifis_eventtthenKEventelseKJobletproject(typea)(_:akind)job_or_event=(Obj.magic:t->a)job_or_eventend