module Events:Events is for keeping a set of events that need to happen in the future. One can add and remove events, and update the time to find out the events that need to happen.sig
..end
module Event:sig
..end
type 'a
t
val invariant : 'a t -> unit
val create : now:Core.Std.Time.t -> 'a t
val iter : 'a t -> f:('a Event.t -> unit) -> unit
val is_empty : 'a t -> bool
val now : 'a t -> Core.Std.Time.t
val advance_clock : 'a t -> to_:Core.Std.Time.t -> [ `Not_in_the_future | `Ok of 'a list ]
advance_clock t ~to_
advances the clock to to_
, and returns `Ok values
, with
values for all events in t
with at <= to_
.
advance_clock
returns `Not_in_the_future
if Time.(<=) to_ (now t)
val add : 'a t ->
at:Core.Std.Time.t -> 'a -> [ `Not_in_the_future | `Ok of 'a Event.t ]
add t ~at value
adds a new event e
to t
with the specified value
, and returns
`Ok e
. add
returns `Not_in_the_future
if Time.(<=) at (now t)
.val remove : 'a t -> 'a Event.t -> [ `Not_present | `Removed ]
remove t event
removes event
from t
and returns `Removed
, if event
is
present in t
, else it returns `Not_present
.val next_upcoming : 'a t -> 'a Event.t option
next_upcoming t
returns the next upcoming event in t
, if any.val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t