Pulselib.PulseBaseMemorymodule type S = sig ... endinclude 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.tmodule Access :
Pulselib.PulseBasicInterface.Access.S
with type key := Pulselib.PulseBasicInterface.AbstractValue.tmodule Edges : sig ... endinclude IStdlib.PrettyPrintable.PPMonoMap
with type key := Pulselib.PulseBasicInterface.AbstractValue.t
and type value = Edges.tinclude IStdlib.PrettyPrintable.MonoMap
with type key := Pulselib.PulseBasicInterface.AbstractValue.t
with type value = Edges.ttype value = Edges.tval empty : tval is_empty : t -> boolval mem : Pulselib.PulseBasicInterface.AbstractValue.t -> t -> boolval add : Pulselib.PulseBasicInterface.AbstractValue.t -> value -> t -> tval update :
Pulselib.PulseBasicInterface.AbstractValue.t ->
(value option -> value option) ->
t ->
tval singleton : Pulselib.PulseBasicInterface.AbstractValue.t -> value -> tval remove : Pulselib.PulseBasicInterface.AbstractValue.t -> t -> tval iter :
(Pulselib.PulseBasicInterface.AbstractValue.t -> value -> unit) ->
t ->
unitval fold :
(Pulselib.PulseBasicInterface.AbstractValue.t -> value -> 'a -> 'a) ->
t ->
'a ->
'aval for_all :
(Pulselib.PulseBasicInterface.AbstractValue.t -> value -> bool) ->
t ->
boolval exists :
(Pulselib.PulseBasicInterface.AbstractValue.t -> value -> bool) ->
t ->
boolval filter :
(Pulselib.PulseBasicInterface.AbstractValue.t -> value -> bool) ->
t ->
tval filter_map :
(Pulselib.PulseBasicInterface.AbstractValue.t -> value -> value option) ->
t ->
tval partition :
(Pulselib.PulseBasicInterface.AbstractValue.t -> value -> bool) ->
t ->
t * tval cardinal : t -> intval bindings : t -> (Pulselib.PulseBasicInterface.AbstractValue.t * value) listval min_binding : t -> Pulselib.PulseBasicInterface.AbstractValue.t * valueval min_binding_opt :
t ->
(Pulselib.PulseBasicInterface.AbstractValue.t * value) optionval max_binding : t -> Pulselib.PulseBasicInterface.AbstractValue.t * valueval max_binding_opt :
t ->
(Pulselib.PulseBasicInterface.AbstractValue.t * value) optionval choose : t -> Pulselib.PulseBasicInterface.AbstractValue.t * valueval choose_opt :
t ->
(Pulselib.PulseBasicInterface.AbstractValue.t * value) optionval split :
Pulselib.PulseBasicInterface.AbstractValue.t ->
t ->
t * value option * tval find : Pulselib.PulseBasicInterface.AbstractValue.t -> t -> valueval find_opt :
Pulselib.PulseBasicInterface.AbstractValue.t ->
t ->
value optionval find_first :
(Pulselib.PulseBasicInterface.AbstractValue.t -> bool) ->
t ->
Pulselib.PulseBasicInterface.AbstractValue.t * valueval find_first_opt :
(Pulselib.PulseBasicInterface.AbstractValue.t -> bool) ->
t ->
(Pulselib.PulseBasicInterface.AbstractValue.t * value) optionval find_last :
(Pulselib.PulseBasicInterface.AbstractValue.t -> bool) ->
t ->
Pulselib.PulseBasicInterface.AbstractValue.t * valueval find_last_opt :
(Pulselib.PulseBasicInterface.AbstractValue.t -> bool) ->
t ->
(Pulselib.PulseBasicInterface.AbstractValue.t * value) optionval mapi :
(Pulselib.PulseBasicInterface.AbstractValue.t -> value -> value) ->
t ->
tval is_singleton_or_more :
t ->
(Pulselib.PulseBasicInterface.AbstractValue.t * value)
IStdlib.IContainer.singleton_or_moreval fold_mapi :
t ->
init:'a ->
f:(Pulselib.PulseBasicInterface.AbstractValue.t -> 'a -> value -> 'a * value) ->
'a * tval of_seq :
(Pulselib.PulseBasicInterface.AbstractValue.t * value) Stdlib.Seq.t ->
tval to_seq :
t ->
(Pulselib.PulseBasicInterface.AbstractValue.t * value) Stdlib.Seq.tinclude IStdlib.PrettyPrintable.PrintableType with type t := tval pp : IStdlib.PrettyPrintable.F.formatter -> t -> unitval pp_key :
IStdlib.PrettyPrintable.F.formatter ->
Pulselib.PulseBasicInterface.AbstractValue.t ->
unitval register_address : Pulselib.PulseBasicInterface.AbstractValue.t -> t -> tval add_edge :
Pulselib.PulseBasicInterface.AbstractValue.t ->
Access.t ->
(Pulselib.PulseBasicInterface.AbstractValue.t
* Pulselib.PulseBasicInterface.ValueHistory.t) ->
t ->
tval find_edge_opt :
?get_var_repr:
(Pulselib.PulseBasicInterface.AbstractValue.t ->
Pulselib.PulseBasicInterface.AbstractValue.t) ->
Pulselib.PulseBasicInterface.AbstractValue.t ->
Access.t ->
t ->
(Pulselib.PulseBasicInterface.AbstractValue.t
* Pulselib.PulseBasicInterface.ValueHistory.t)
optionval has_edge :
Pulselib.PulseBasicInterface.AbstractValue.t ->
Access.t ->
t ->
boolval is_allocated : t -> Pulselib.PulseBasicInterface.AbstractValue.t -> boolwhether the address has a non-empty set of edges
val yojson_of_t : t -> Yojson.Safe.tval canonicalize :
get_var_repr:
(Pulselib.PulseBasicInterface.AbstractValue.t ->
Pulselib.PulseBasicInterface.AbstractValue.t) ->
t ->
t Pulselib.PulseBasicInterface.SatUnsat.treplace 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
val subst_var :
for_summary:bool ->
(Pulselib.PulseBasicInterface.AbstractValue.t
* Pulselib.PulseBasicInterface.AbstractValue.t) ->
t ->
t Pulselib.PulseBasicInterface.SatUnsat.t