module Vdd:sig..end
type +'a t
Man.v Man.t).
Objects of this type contains both the top node of the ADD and the manager to which the node belongs. The manager can be retrieved with Cudd.Vdd.manager. Objects of this type are automatically garbage collected.
type 'a vdd =
| |
Leaf of |
(* | Terminal value | *) |
| |
Ite of |
(* | Decision on CUDD variable | *) |
tCudd.Add for the description of the interface, as
it is nearly identical to Cudd.Add, except that real leaves are replaced by
OCaml leaves.
IMPORTANT NOTE: this is an internal module, which assumes that leaves are either immediate values (booleans, integers, constant sums), or values allocated with caml_alloc_shr (that can be moved only during a memory compaction).
The only case where you may use directly Cudd.Vdd without worrying is when the
leaves are represented as immediate values (booleans, integers, constant
sums) in the heap.
Otherwise, use module Cudd.Mtbdd or Cudd.Mtbddc to be safe, and also to ensure
that you do not have two constant MTBDDs pointing to different but
semantically equivalent values.
Extractors
val manager : 'a t -> Cudd.Man.v Cudd.Man.tval is_cst : 'a t -> boolval topvar : 'a t -> intval dthen : 'a t -> 'a tval delse : 'a t -> 'a tval cofactors : int -> 'a t -> 'a t * 'a tval cofactor : 'a t -> Cudd.Man.v Cudd.Bdd.t -> 'a tval dval : 'a t -> 'aval inspect : 'a t -> 'a vddval support : 'a t -> Cudd.Man.v Cudd.Bdd.tval supportsize : 'a t -> intval is_var_in : int -> 'a t -> boolval vectorsupport : 'a t array -> Cudd.Man.v Cudd.Bdd.tval vectorsupport2 : Cudd.Man.v Cudd.Bdd.t array -> 'a t array -> Cudd.Man.v Cudd.Bdd.tval cst : Cudd.Man.v Cudd.Man.t -> 'a -> 'a tval _background : Cudd.Man.v Cudd.Man.t -> 'a tCudd.Vdd.nodes_below_level, etc...: you can try to retrieve a constant value of some type and () value of the background value will be treated as another type.val ite : Cudd.Man.v Cudd.Bdd.t -> 'a t -> 'a t -> 'a tval ite_cst : Cudd.Man.v Cudd.Bdd.t ->
'a t -> 'a t -> 'a t optionval eval_cst : 'a t -> Cudd.Man.v Cudd.Bdd.t -> 'a t optionval compose : int -> Cudd.Bdd.vt -> 'a t -> 'a tval vectorcompose : ?memo:Cudd.Memo.t -> Cudd.Bdd.vt array -> 'a t -> 'a tval is_equal : 'a t -> 'a t -> boolval is_equal_when : 'a t -> 'a t -> Cudd.Man.v Cudd.Bdd.t -> boolval is_eval_cst : 'a t -> Cudd.Man.v Cudd.Bdd.t -> 'a optionval is_ite_cst : Cudd.Man.v Cudd.Bdd.t -> 'a t -> 'a t -> 'a optionval size : 'a t -> intval nbpaths : 'a t -> floatval nbnonzeropaths : 'a t -> floatval nbminterms : int -> 'a t -> floatval density : int -> 'a t -> floatval nbleaves : 'a t -> intval varmap : 'a t -> 'a tval permute : ?memo:Cudd.Memo.t -> 'a t -> int array -> 'a tval iter_cube : (Cudd.Man.tbool array -> 'a -> unit) -> 'a t -> unitval iter_node : ('a t -> unit) -> 'a t -> unitval guard_of_node : 'a t -> 'a t -> Cudd.Man.v Cudd.Bdd.tval guard_of_nonbackground : 'a t -> Cudd.Man.v Cudd.Bdd.tval nodes_below_level : ?max:int -> 'a t -> int option -> 'a t arrayCuddaux_NodesBelowLevel. nodes_below_level ?max f olevel returns all (if max=None), otherwise at most Some max nodes pointed by the ADD, indexed by a variable of level greater or equal than level, and encountered first in the top-down exploration (i.e., whenever a node is collected, its sons are not collected). If olevel=None, then only constant nodes are collected.val guard_of_leaf : 'a t -> 'a -> Cudd.Man.v Cudd.Bdd.tval leaves : 'a t -> 'a arrayval pick_leaf : 'a t -> 'aNone if the only leaf is the background leaf.val guardleafs : 'a t -> (Cudd.Man.v Cudd.Bdd.t * 'a) arrayval constrain : 'a t -> Cudd.Man.v Cudd.Bdd.t -> 'a tval tdconstrain : 'a t -> Cudd.Man.v Cudd.Bdd.t -> 'a tval restrict : 'a t -> Cudd.Man.v Cudd.Bdd.t -> 'a tval tdrestrict : 'a t -> Cudd.Man.v Cudd.Bdd.t -> 'a tCudd.MapleafCudd.Userval transfer : 'a t -> Cudd.Man.v Cudd.Man.t -> 'a tval print__minterm : (Format.formatter -> 'a -> unit) -> Format.formatter -> 'a t -> unitval print_minterm : (Format.formatter -> int -> unit) ->
(Format.formatter -> 'a -> unit) -> Format.formatter -> 'a t -> unitval print : (Format.formatter -> Cudd.Man.v Cudd.Bdd.t -> unit) ->
(Format.formatter -> 'a -> unit) -> Format.formatter -> 'a t -> unit