Module Pulselib.PulseBaseMemory

module type S = sig ... end
include S with type key := Pulselib.PulseBasicInterface.AbstractValue.t and type out_of_map_t := Pulselib.PulseBasicInterface.AbstractValue.t * Pulselib.PulseBasicInterface.ValueHistory.t and type in_map_t := Pulselib.PulseBasicInterface.AbstractValue.t * Pulselib.PulseBasicInterface.ValueHistory.t
module Edges : sig ... end
include IStdlib.PrettyPrintable.PPMonoMap with type key := Pulselib.PulseBasicInterface.AbstractValue.t and type value = Edges.t
include IStdlib.PrettyPrintable.MonoMap with type key := Pulselib.PulseBasicInterface.AbstractValue.t with type value = Edges.t
type value = Edges.t
type t
val empty : t
val is_empty : t -> bool
val update : Pulselib.PulseBasicInterface.AbstractValue.t -> (value option -> value option) -> t -> t
val merge : (Pulselib.PulseBasicInterface.AbstractValue.t -> value option -> value option -> value option) -> t -> t -> t
val union : (Pulselib.PulseBasicInterface.AbstractValue.t -> value -> value -> value option) -> t -> t -> t
val iter : (Pulselib.PulseBasicInterface.AbstractValue.t -> value -> unit) -> t -> unit
val fold : (Pulselib.PulseBasicInterface.AbstractValue.t -> value -> 'a -> 'a) -> t -> 'a -> 'a
val for_all : (Pulselib.PulseBasicInterface.AbstractValue.t -> value -> bool) -> t -> bool
val exists : (Pulselib.PulseBasicInterface.AbstractValue.t -> value -> bool) -> t -> bool
val filter : (Pulselib.PulseBasicInterface.AbstractValue.t -> value -> bool) -> t -> t
val filter_map : (Pulselib.PulseBasicInterface.AbstractValue.t -> value -> value option) -> t -> t
val partition : (Pulselib.PulseBasicInterface.AbstractValue.t -> value -> bool) -> t -> t * t
val cardinal : t -> int
val min_binding_opt : t -> (Pulselib.PulseBasicInterface.AbstractValue.t * value) option
val max_binding_opt : t -> (Pulselib.PulseBasicInterface.AbstractValue.t * value) option
val map : (value -> value) -> t -> t
val fold_map : t -> init:'a -> f:('a -> value -> 'a * value) -> 'a * t
val fold_mapi : t -> init:'a -> f:(Pulselib.PulseBasicInterface.AbstractValue.t -> 'a -> value -> 'a * value) -> 'a * t
val of_seq : (Pulselib.PulseBasicInterface.AbstractValue.t * value) Stdlib.Seq.t -> t
val to_seq : t -> (Pulselib.PulseBasicInterface.AbstractValue.t * value) Stdlib.Seq.t
include IStdlib.PrettyPrintable.PrintableType with type t := t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val compare : t -> t -> int
val equal : t -> t -> bool
val register_address : Pulselib.PulseBasicInterface.AbstractValue.t -> t -> t
val is_allocated : t -> Pulselib.PulseBasicInterface.AbstractValue.t -> bool

whether the address has a non-empty set of edges

val yojson_of_t : t -> Yojson.Safe.t

replace each address in the heap by its canonical representative according to the current equality relation, represented by get_var_repr; also remove addresses that point to empty edges