Module Incremental__.Expert

include module type of sig ... end
type 'a edge = 'a Incremental__Types.Expert.edge = {
child : 'a Incremental__Types.Node.t;
on_change : 'a -> unit;
mutable index : int Incremental__.Import.Uopt.t;
}
type packed_edge = Incremental__Types.Expert.packed_edge =
| E : 'a edge -> packed_edge
type 'a t = 'a Incremental__Types.Expert.t = {
f : unit -> 'a;
on_observability_change : is_now_observable:bool -> unit;
mutable children : packed_edge Incremental__.Import.Uopt.t Incremental__.Import.Array.t;
mutable num_children : int;
mutable force_stale : bool;
mutable num_invalid_children : int;
mutable will_fire_all_callbacks : bool;
}
include Core_kernel.Invariant.S1 with type 'a t := 'a t
type 'a t
val invariant : 'a Base__.Invariant_intf.inv -> 'a t Base__.Invariant_intf.inv
include Incremental__.Sexp_of.S1 with type 'a t := 'a t
type 'a t
val sexp_of_t : ('a -> Ppx_sexp_conv_lib.Sexp.t) -> 'a t -> Ppx_sexp_conv_lib.Sexp.t
val sexp_of_edge : ('a -> Core_kernel.Sexp.t) -> 'a edge -> Core_kernel.Sexp.t
val invariant_about_num_invalid_children : _ t -> is_necessary:bool -> unit
val create : f:(unit -> 'a) -> on_observability_change:(is_now_observable:bool -> unit) -> 'a t
val make_stale : _ t -> [ `Already_stale | `Ok ]
val incr_invalid_children : _ t -> unit
val decr_invalid_children : _ t -> unit
val add_child_edge : _ t -> packed_edge -> int

Returns the index of this new edge.

val swap_children : _ t -> child_index1:int -> child_index2:int -> unit
val last_child_edge_exn : _ t -> packed_edge
val remove_last_child_edge_exn : _ t -> unit
val before_main_computation : _ t -> [ `Invalid | `Ok ]
val observability_change : _ t -> is_now_observable:bool -> unit
val run_edge_callback : _ t -> child_index:int -> unit