123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103open!CoremoduletypePoint=sigtypet[@@derivingsexp,bin_io,equal,compare,quickcheck]endmoduletypeBound=sigtype'at[@@derivingsexp,bin_io,equal,quickcheck]endmoduletypeS=sigmodulePoint:PointmoduleBound:Boundtype'arangetype'aor_emptytypet=Point.trange[@@derivingsexp,bin_io,equal,quickcheck]valrange:Point.tBound.t->Point.tBound.t->tvalat_least:Point.t->tvalat_most:Point.t->tvalgreater_than:Point.t->tvalless_than:Point.t->tvalall:tvalis_all:t->bool(** Return the join of two ranges. This is an approximation to the setwise union, since
the union of two disjoint intervals is not in general an interval. *)valjoin:t->t->t(** Return -1 if the given value is less than the whole range, 0 if it's within the
range (inclusive), or 1 if it's greater than the whole range. *)valcompare_point:Point.t->t->int(** Return whether the range's lower bound is either [No_bound] or less than [lower] and
its upper bound is either [No_bound] or greater than [upper]. *)valcovers_points:t->lower:Point.t->upper:Point.t->bool(** Returns whether the range has no upper_bound *)valis_endless:t->boolvaldisjoint:t->t->boolmoduleOr_empty:sigtypenonrect=Point.tor_empty[@@derivingsexp,bin_io,equal,quickcheck]valrange:Point.tBound.t->Point.tBound.t->tvalall:tvalat_least:Point.t->tvalat_most:Point.t->tvalgreater_than:Point.t->tvalless_than:Point.t->tvalis_all:t->boolvalempty:tvalis_empty:t->boolvalcontains_point:t->Point.t->bool(** Returns whether the range has no upper_bound *)valis_endless:t->bool(** Return the join of two ranges. See caveat on [Make.join]. *)valjoin:t->t->tvalinter:t->t->tvaldisjoint:t->t->boolendvalinter:t->t->Or_empty.tvalinter_opt:t->t->toptionendmoduletypeRange=sigmoduleBound:sigtype'at=|No_bound|Openof'a|Closedof'a[@@derivingsexp,bin_io,equal,quickcheck]endtype'at={lower_bound:'aBound.t;upper_bound:'aBound.t}moduleOr_empty:sigtypenonrec'at=|Non_emptyof'at|EmptyendmoduletypePoint=PointmoduletypeS=Swithtype'arange:='atwithtype'aor_empty:='aOr_empty.twithmoduleBound:=BoundmoduleMake(Point:Point):SwithmodulePoint=PointmoduleTime_ns_span:SwithtypePoint.t=Time_ns.Span.tmoduleByte_units:SwithtypePoint.t=Byte_units.tend