Adiar
2.1.0
An External Memory Decision Diagram Library
|
A Zero-suppressed Decision Diagram (ZDD) represents a family of a set of \( n \) numbers, i.e. an \( S \subseteq 2^{\{ 0, 1, \dots, n-1 \}} \). More...
Classes | |
class | adiar::__zdd |
A (possibly unreduced) Zero-suppressed Decision Diagram. More... | |
class | adiar::zdd |
Reduced Ordered Zero-suppressed Decision Diagram. More... | |
Basic ZDD Constructors | |
To construct a more complex but well-structured zdd by hand, please use the zdd_builder (see builder) instead. | |
zdd | adiar::zdd_terminal (bool value) |
The ZDD of only a single terminal. More... | |
zdd | adiar::zdd_empty () |
The empty family, i.e. Ø . | |
zdd | adiar::zdd_null () |
The family only with the empty set, i.e. { Ø } . | |
zdd | adiar::zdd_ithvar (zdd::label_type var, const generator< zdd::label_type > &dom) |
The set of bitvectors over a given domain where var is set to true. More... | |
template<typename ForwardIt > | |
zdd | adiar::zdd_ithvar (zdd::label_type var, ForwardIt begin, ForwardIt end) |
The set of bitvectors over a given domain where var is set to true. More... | |
zdd | adiar::zdd_ithvar (zdd::label_type var) |
The set of bitvectors over the globally set domain where var is set to true. More... | |
zdd | adiar::zdd_nithvar (zdd::label_type var, const generator< zdd::label_type > &dom) |
The set of bitvectors over a given domain where var is set to false. More... | |
template<typename ForwardIt > | |
zdd | adiar::zdd_nithvar (zdd::label_type var, ForwardIt begin, ForwardIt end) |
The set of bitvectors over a given domain where var is set to false. More... | |
zdd | adiar::zdd_nithvar (zdd::label_type var) |
The set of bitvectors over the globally set domain where var is set to false. More... | |
zdd | adiar::zdd_vars (const generator< zdd::label_type > &vars) |
The family { { 1, 2, ..., k } }. More... | |
template<typename ForwardIt > | |
zdd | adiar::zdd_vars (ForwardIt begin, ForwardIt end) |
The family { { 1, 2, ..., k } }. More... | |
zdd | adiar::zdd_point (const generator< zdd::label_type > &vars) |
The family { { 1, 2, ..., k } } with a single bit-vector. More... | |
template<typename ForwardIt > | |
zdd | adiar::zdd_point (ForwardIt begin, ForwardIt end) |
The family { { 1, 2, ..., k } } with a single bit-vector. More... | |
zdd | adiar::zdd_singleton (zdd::label_type var) |
The family { {i} } . More... | |
zdd | adiar::zdd_singletons (const generator< zdd::label_type > &vars) |
The family { {1}, {2}, ..., {k} }. More... | |
template<typename ForwardIt > | |
zdd | adiar::zdd_singletons (ForwardIt begin, ForwardIt end) |
The family { {1}, {2}, ..., {k} }. More... | |
zdd | adiar::zdd_powerset (const generator< zdd::label_type > &vars) |
The powerset of all given variables. More... | |
template<typename ForwardIt > | |
zdd | adiar::zdd_powerset (ForwardIt begin, ForwardIt end) |
The powerset of all given variables. More... | |
zdd | adiar::zdd_bot (const generator< zdd::label_type > &dom) |
Bottom of the powerset lattice. More... | |
template<typename ForwardIt > | |
zdd | adiar::zdd_bot (ForwardIt begin, ForwardIt end) |
Bottom of the powerset lattice. More... | |
zdd | adiar::zdd_bot () |
Bottom of the powerset lattice. More... | |
zdd | adiar::zdd_top (const generator< zdd::label_type > &dom) |
Top of the powerset lattice. More... | |
template<typename ForwardIt > | |
zdd | adiar::zdd_top (ForwardIt begin, ForwardIt end) |
Top of the powerset lattice. More... | |
zdd | adiar::zdd_top () |
Top of the powerset lattice. More... | |
Basic ZDD Manipulation | |
__zdd | adiar::zdd_binop (const zdd &A, const zdd &B, const predicate< bool, bool > &op) |
Apply a binary operator between the sets of two families. More... | |
__zdd | adiar::zdd_binop (const exec_policy &ep, const zdd &A, const zdd &B, const predicate< bool, bool > &op) |
Apply a binary operator between the sets of two families. | |
__zdd | adiar::zdd_union (const zdd &A, const zdd &B) |
The union of two families of sets. More... | |
__zdd | adiar::zdd_union (const exec_policy &ep, const zdd &A, const zdd &B) |
The union of two families of sets. | |
__zdd | adiar::operator| (const zdd &lhs, const zdd &rhs) |
zdd | adiar::operator+ (const zdd &A) |
__zdd | adiar::operator+ (const zdd &lhs, const zdd &rhs) |
__zdd | adiar::zdd_intsec (const zdd &A, const zdd &B) |
The intersection of two families of sets. More... | |
__zdd | adiar::zdd_intsec (const exec_policy &ep, const zdd &A, const zdd &B) |
The intersection of two families of sets. | |
__zdd | adiar::operator& (const zdd &lhs, const zdd &rhs) |
__zdd | adiar::operator* (const zdd &lhs, const zdd &rhs) |
__zdd | adiar::zdd_diff (const zdd &A, const zdd &B) |
The set difference of two families of sets. More... | |
__zdd | adiar::zdd_diff (const exec_policy &ep, const zdd &A, const zdd &B) |
The set difference of two families of sets. | |
__zdd | adiar::operator- (const zdd &A) |
__zdd | adiar::operator- (const zdd &lhs, const zdd &rhs) |
__zdd | adiar::zdd_change (const zdd &A, const generator< zdd::label_type > &vars) |
The symmetric difference between each set in the family and the given set of variables. More... | |
__zdd | adiar::zdd_change (const exec_policy &ep, const zdd &A, const generator< zdd::label_type > &vars) |
The symmetric difference between each set in the family and the given set of variables. | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_change (const zdd &A, ForwardIt begin, ForwardIt end) |
The symmetric difference between each set in the family and the given set of variables. More... | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_change (const exec_policy &ep, const zdd &A, ForwardIt begin, ForwardIt end) |
The symmetric difference between each set in the family and the given set of variables. | |
__zdd | adiar::zdd_complement (const zdd &A, const generator< zdd::label_type > &dom) |
Complement of A within the given domain. More... | |
__zdd | adiar::zdd_complement (const exec_policy &ep, const zdd &A, const generator< zdd::label_type > &dom) |
Complement of A within the given domain. | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_complement (const zdd &A, ForwardIt begin, ForwardIt end) |
Complement of A within the given domain. More... | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_complement (const exec_policy &ep, const zdd &A, ForwardIt begin, ForwardIt end) |
Complement of A within the given domain. | |
__zdd | adiar::zdd_complement (const zdd &A) |
Complement of A within the global Variable Domain. More... | |
__zdd | adiar::zdd_complement (const exec_policy &ep, const zdd &A) |
Complement of A within the global Variable Domain. | |
__zdd | adiar::operator~ (const zdd &A) |
__zdd | adiar::zdd_expand (const zdd &A, const generator< zdd::label_type > &vars) |
Expands the domain of the given ZDD to also include the given set of labels. More... | |
__zdd | adiar::zdd_expand (const exec_policy &ep, const zdd &A, const generator< zdd::label_type > &vars) |
Expands the domain of the given ZDD to also include the given set of labels. | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_expand (const zdd &A, ForwardIt begin, ForwardIt end) |
Expands the domain of the given ZDD to also include the given set of labels. More... | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_expand (const exec_policy &ep, const zdd &A, ForwardIt begin, ForwardIt end) |
Expands the domain of the given ZDD to also include the given set of labels. | |
__zdd | adiar::zdd_offset (const zdd &A, zdd::label_type var) |
Subset that do not include the given element. More... | |
__zdd | adiar::zdd_offset (const exec_policy &ep, const zdd &A, zdd::label_type var) |
Subset that do not include the given element. | |
__zdd | adiar::zdd_offset (const zdd &A) |
Subset that do not include the top variable. More... | |
__zdd | adiar::zdd_offset (const exec_policy &ep, const zdd &A) |
Subset that do not include the top variable. | |
__zdd | adiar::zdd_offset (const zdd &A, const generator< zdd::label_type > &vars) |
Subset that do not include the given set of variables. More... | |
__zdd | adiar::zdd_offset (const exec_policy &ep, const zdd &A, const generator< zdd::label_type > &vars) |
Subset that do not include the given set of variables. | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_offset (const zdd &A, ForwardIt begin, ForwardIt end) |
Subset that do not include the given set of variables. More... | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_offset (const exec_policy &ep, const zdd &A, ForwardIt begin, ForwardIt end) |
Subset that do not include the given set of variables. | |
__zdd | adiar::zdd_onset (const zdd &A, zdd::label_type var) |
Subset that do include the given element. More... | |
__zdd | adiar::zdd_onset (const exec_policy &ep, const zdd &A, zdd::label_type var) |
Subset that do include the given element. | |
__zdd | adiar::zdd_onset (const zdd &A) |
Subset that do include the top variable. More... | |
__zdd | adiar::zdd_onset (const exec_policy &ep, const zdd &A) |
Subset that do include the top variable. | |
__zdd | adiar::zdd_onset (const zdd &A, const generator< zdd::label_type > &vars) |
Subset that do include the given set of variables. More... | |
__zdd | adiar::zdd_onset (const exec_policy &ep, const zdd &A, const generator< zdd::label_type > &vars) |
Subset that do include the given set of variables. | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_onset (const zdd &A, ForwardIt begin, ForwardIt end) |
Subset that do include the given set of variables. More... | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_onset (const exec_policy &ep, const zdd &A, ForwardIt begin, ForwardIt end) |
Subset that do include the given set of variables. | |
__zdd | adiar::zdd_project (const zdd &A, const predicate< zdd::label_type > &dom) |
Project family of sets onto a domain, i.e. remove from every set all variables not within the domain. More... | |
__zdd | adiar::zdd_project (const exec_policy &ep, const zdd &A, const predicate< zdd::label_type > &dom) |
Project family of sets onto a domain, i.e. remove from every set all variables not within the domain. | |
__zdd | adiar::zdd_project (const zdd &A, const generator< zdd::label_type > &dom) |
Project family of sets onto a domain, i.e. remove from every set all variables not within the domain. More... | |
__zdd | adiar::zdd_project (const exec_policy &ep, const zdd &A, const generator< zdd::label_type > &dom) |
Project family of sets onto a domain, i.e. remove from every set all variables not within the domain. | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_project (const zdd &A, ForwardIt begin, ForwardIt end) |
Project family of sets onto a domain, i.e. remove from every set all variables not within the domain. More... | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_project (const exec_policy &ep, const zdd &A, ForwardIt begin, ForwardIt end) |
Project family of sets onto a domain, i.e. remove from every set all variables not within the domain. | |
ZDD Predicates | |
bool | adiar::zdd_iscanonical (const zdd &A) |
Check whether a given ZDD is canonical. More... | |
bool | adiar::zdd_isterminal (const zdd &A) |
Whether this ZDD represents a terminal. | |
bool | adiar::zdd_isfalse (const zdd &A) |
Whether this ZDD represents false terminal. | |
bool | adiar::zdd_isempty (const zdd &A) |
Whether it is the empty family, i.e. Ø . | |
bool | adiar::zdd_istrue (const zdd &A) |
Whether this BDD represents true terminal. | |
bool | adiar::zdd_isnull (const zdd &A) |
Whether it is the null family, i.e. { Ø } . | |
bool | adiar::zdd_ispoint (const zdd &A) |
Whether it contains a single bit-vector a , i.e. A = { a }. | |
bool | adiar::zdd_equal (const zdd &A, const zdd &B) |
Whether they represent the same family. | |
bool | adiar::zdd_equal (const exec_policy &ep, const zdd &A, const zdd &B) |
Whether they represent the same family. | |
bool | adiar::operator== (const zdd &lhs, const zdd &rhs) |
bool | adiar::zdd_unequal (const zdd &A, const zdd &B) |
Whether they represent two different families. | |
bool | adiar::zdd_unequal (const exec_policy &ep, const zdd &A, const zdd &B) |
Whether they represent two different families. | |
bool | adiar::operator!= (const zdd &lhs, const zdd &rhs) |
bool | adiar::zdd_subseteq (const zdd &A, const zdd &B) |
Whether one family is a subset or equal to the other. | |
bool | adiar::zdd_subseteq (const exec_policy &ep, const zdd &A, const zdd &B) |
Whether one family is a subset or equal to the other. | |
bool | adiar::operator<= (const zdd &lhs, const zdd &rhs) |
bool | adiar::operator>= (const zdd &lhs, const zdd &rhs) |
bool | adiar::zdd_subset (const zdd &A, const zdd &B) |
Whether one family is a strict subset of the other. | |
bool | adiar::zdd_subset (const exec_policy &ep, const zdd &A, const zdd &B) |
Whether one family is a strict subset of the other. | |
bool | adiar::operator< (const zdd &lhs, const zdd &rhs) |
bool | adiar::operator> (const zdd &lhs, const zdd &rhs) |
bool | adiar::zdd_disjoint (const zdd &A, const zdd &B) |
Whether the two families are disjoint. | |
bool | adiar::zdd_disjoint (const exec_policy &ep, const zdd &A, const zdd &B) |
Whether the two families are disjoint. | |
ZDD Counting Operations | |
size_t | adiar::zdd_nodecount (const zdd &A) |
The number of (internal) nodes used to represent the family of sets. | |
zdd::label_type | adiar::zdd_varcount (const zdd &A) |
The number of variables that exist in the family of sets, i.e. the number of levels in the ZDD. | |
uint64_t | adiar::zdd_size (const zdd &A) |
The number of sets in the family of sets. | |
uint64_t | adiar::zdd_size (const exec_policy &ep, const zdd &A) |
The number of sets in the family of sets. | |
Set Elements | |
void | adiar::zdd_support (const zdd &A, const consumer< zdd::label_type > &cb) |
Get (in ascending order) all of the variable labels that occur in the family. More... | |
template<typename OutputIt , typename = enable_if<!is_convertible<OutputIt, consumer<zdd::label_type>>>> | |
OutputIt | adiar::zdd_support (const zdd &A, OutputIt iter) |
Copy all of the variable labels (in ascending order) that occur in the family into the given container. More... | |
zdd::label_type | adiar::zdd_topvar (const zdd &f) |
Get the root's variable label. More... | |
zdd::label_type | adiar::zdd_minvar (const zdd &A) |
Get the minimal occurring variable in the family. More... | |
zdd::label_type | adiar::zdd_maxvar (const zdd &A) |
Get the maximal occurring variable in the family. More... | |
bool | adiar::zdd_contains (const zdd &A, const generator< zdd::label_type > &a) |
Whether the family includes the given set of labels. More... | |
template<typename ForwardIt > | |
bool | adiar::zdd_contains (const zdd &A, ForwardIt begin, ForwardIt end) |
Whether the family includes the given set of labels. More... | |
zdd | adiar::zdd_minelem (const zdd &A) |
Retrieves the lexicographically smallest set a in A. More... | |
void | adiar::zdd_minelem (const zdd &A, const consumer< zdd::label_type > &cb) |
Retrieves the lexicographically smallest set a in A. More... | |
template<typename OutputIt , typename = enable_if<!is_convertible<OutputIt, consumer<zdd::label_type>>>> | |
OutputIt | adiar::zdd_minelem (const zdd &A, OutputIt iter) |
Retrieves the lexicographically smallest set a in A. More... | |
zdd | adiar::zdd_maxelem (const zdd &A) |
Retrieves the lexicographically largest set a in A. More... | |
void | adiar::zdd_maxelem (const zdd &A, const consumer< zdd::label_type > &cb) |
Retrieves the lexicographically largest set a in A. More... | |
template<typename OutputIt , typename = enable_if<!is_convertible<OutputIt, consumer<zdd::label_type>>>> | |
OutputIt | adiar::zdd_maxelem (const zdd &A, OutputIt iter) |
Retrieves the lexicographically largest set a in A. More... | |
Conversion to ZDDs | |
__zdd | adiar::zdd_from (const bdd &f, const generator< zdd::label_type > &dom) |
Obtains the ZDD that represents the same function/set as the given BDD within the given domain. More... | |
__zdd | adiar::zdd_from (const exec_policy &ep, const bdd &f, const generator< zdd::label_type > &dom) |
Obtains the ZDD that represents the same function/set as the given BDD within the given domain. | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_from (const bdd &f, ForwardIt begin, ForwardIt end) |
Obtains the ZDD that represents the same function/set as the given BDD within the given domain. More... | |
template<typename ForwardIt > | |
__zdd | adiar::zdd_from (const exec_policy &ep, const bdd &f, ForwardIt begin, ForwardIt end) |
Obtains the ZDD that represents the same function/set as the given BDD within the given domain. | |
__zdd | adiar::zdd_from (const bdd &f) |
Obtains the ZDD that represents the same function/set as the given BDD within the global Variable Domain. More... | |
__zdd | adiar::zdd_from (const exec_policy &ep, const bdd &f) |
Obtains the BDD that represents the same function/set as the given ZDD within the global domain. | |
Dot Files of ZDDs | |
void | adiar::zdd_printdot (const zdd &A, std::ostream &out=std::cout, bool include_id=false) |
Output a DOT drawing of a ZDD to the given output stream. | |
void | adiar::zdd_printdot (const zdd &A, const std::string &file_name, bool include_id=false) |
Output a DOT drawing of a ZDD to the file with the given name. | |
A Zero-suppressed Decision Diagram (ZDD) represents a family of a set of \( n \) numbers, i.e. an \( S \subseteq 2^{\{ 0, 1, \dots, n-1 \}} \).
The zdd class takes care of reference counting and optimal garbage collection of the underlying files. To ensure the most disk-space is available, try to garbage collect the zdd objects as quickly as possible and/or minimise the number of lvalues of said type.
Apply a binary operator between the sets of two families.
A | ZDD for the left-hand-side of the operator |
B | ZDD for the right-hand-side of the operator |
op | Binary predicate to combine the two families. |
zdd adiar::zdd_bot | ( | const generator< zdd::label_type > & | dom | ) |
Bottom of the powerset lattice.
dom | Generator function of the variables in descending order. These values may not exceed zdd::max_label . |
|
inline |
Bottom of the powerset lattice.
begin | Single-pass forward iterator that provides the domain's variables in descending order. The variables may not exceed zdd::max_label . |
end | Marks the end for begin . |
__zdd adiar::zdd_change | ( | const zdd & | A, |
const generator< zdd::label_type > & | vars | ||
) |
The symmetric difference between each set in the family and the given set of variables.
A | ZDD to apply with the other. |
vars | Generator function of labels to flip in ascending order. These values may not exceed zdd::max_label . |
__zdd adiar::zdd_change | ( | const zdd & | A, |
ForwardIt | begin, | ||
ForwardIt | end | ||
) |
The symmetric difference between each set in the family and the given set of variables.
A | ZDD to apply with the other. |
begin | Single-pass forward iterator that provides the to-be flipped variables in ascending order. These values may not exceed zdd::max_label . |
end | Marks the end for begin . |
Complement of A within the global Variable Domain.
A | family of sets to complement |
A
.__zdd adiar::zdd_complement | ( | const zdd & | A, |
const generator< zdd::label_type > & | dom | ||
) |
Complement of A within the given domain.
A | family of sets to complement |
dom | Labels of the domain in ascending order |
__zdd adiar::zdd_complement | ( | const zdd & | A, |
ForwardIt | begin, | ||
ForwardIt | end | ||
) |
Complement of A within the given domain.
A | family of sets to complement |
begin | Single-pass forward iterator that provides the domain's variables in ascending order. These values may not exceed zdd::max_label . |
end | Marks the end for begin . |
bool adiar::zdd_contains | ( | const zdd & | A, |
const generator< zdd::label_type > & | a | ||
) |
Whether the family includes the given set of labels.
A | Set of interest |
a | Generator of a bit-vector in ascending order. All variables geneated should be smaller than or equal to zdd::max_label . |
bool adiar::zdd_contains | ( | const zdd & | A, |
ForwardIt | begin, | ||
ForwardIt | end | ||
) |
Whether the family includes the given set of labels.
A | Set of interest |
begin | Single-pass forward iterator of the set of labels in ascending order. All its values should be smaller than or equals to zdd::max_label . |
end | Marks the end for begin . |
The set difference of two families of sets.
__zdd adiar::zdd_expand | ( | const zdd & | A, |
const generator< zdd::label_type > & | vars | ||
) |
Expands the domain of the given ZDD to also include the given set of labels.
Adds don't care nodes on each levels in vars
. That is, this essentially is the inverse of the zdd_project
and lifts the set of sets unprojects to a larger domain.
A | Family of set to expand. |
vars | Generator function of labels to unproject in ascending order. No variables it generates may already exist in A or exceed zdd::max_label . |
__zdd adiar::zdd_expand | ( | const zdd & | A, |
ForwardIt | begin, | ||
ForwardIt | end | ||
) |
Expands the domain of the given ZDD to also include the given set of labels.
A | Family of set to expand. |
begin | Single-pass forward iterator that provides the to-be unprojected variables in ascending order. These may not be present in A or exceed zdd::max_label . |
end | Marks the end for begin . |
Obtains the ZDD that represents the same function/set as the given BDD within the global Variable Domain.
f | Boolean function with the given domain |
A
.__zdd adiar::zdd_from | ( | const bdd & | f, |
const generator< zdd::label_type > & | dom | ||
) |
Obtains the ZDD that represents the same function/set as the given BDD within the given domain.
f | Boolean function with the given domain |
dom | Domain of all variables in ascending order. All generated values should be smaller than or equals to zdd::max_label . |
__zdd adiar::zdd_from | ( | const bdd & | f, |
ForwardIt | begin, | ||
ForwardIt | end | ||
) |
Obtains the ZDD that represents the same function/set as the given BDD within the given domain.
f | Boolean function with the given domain |
begin | Single-pass forward iterator that provides the domain's variables in ascending order. None of its values may exceed zdd::max_label . |
end | Marks the end for begin . |
The intersection of two families of sets.
bool adiar::zdd_iscanonical | ( | const zdd & | A | ) |
Check whether a given ZDD is canonical.
zdd adiar::zdd_ithvar | ( | zdd::label_type | var | ) |
The set of bitvectors over the globally set domain where var is set to true.
var | The variable to be forced to true. |
domain_isset() == true
and the variable var
should occur in the global domain. zdd adiar::zdd_ithvar | ( | zdd::label_type | var, |
const generator< zdd::label_type > & | dom | ||
) |
The set of bitvectors over a given domain where var is set to true.
This function is (given the same domain of variables) semantically equivalent to bdd_ithvar
even though the ZDD DAG does not at all look like the BDD DAG.
var | The variable to be forced to true. |
dom | Generator function of the domain in descending order. These variables should be smaller than or equals to zdd::max_label . |
var
should occur in dom
.invalid_argument | If dom is not in descending order. |
zdd adiar::zdd_ithvar | ( | zdd::label_type | var, |
ForwardIt | begin, | ||
ForwardIt | end | ||
) |
The set of bitvectors over a given domain where var is set to true.
var | The variable to be forced to true. |
begin | Single-pass forward iterator that provides the domain's variables in descending order. The variables may not exceed zdd::max_label . |
end | Marks the end for begin . |
var
should occur in dom
.invalid_argument | If the iterator does not provide values in descending order. |
Retrieves the lexicographically largest set a in A.
Outputs the trace of the high-most path to the true terminal. The resulting assignment is lexicographically largest, where every variable is treated as a digit and \( x_0 > x_1 > \dots \).
A | Set of sets of interest. |
void adiar::zdd_maxelem | ( | const zdd & | A, |
const consumer< zdd::label_type > & | cb | ||
) |
Retrieves the lexicographically largest set a in A.
A | Set of sets of interest. |
cb | Callback function that is called with the variables of the largest set in ascending order of the levels of A . |
A != zdd_empty()
OutputIt adiar::zdd_maxelem | ( | const zdd & | A, |
OutputIt | iter | ||
) |
Retrieves the lexicographically largest set a in A.
A | Set of sets of interest. |
begin | Single-pass output iterator for where to place the output. |
zdd::label_type adiar::zdd_maxvar | ( | const zdd & | A | ) |
Get the maximal occurring variable in the family.
invalid_argument | If A is a terminal. |
Retrieves the lexicographically smallest set a in A.
Outputs the trace of the low-most path to the true terminal. The resulting assignment is lexicographically smallest, where every variable is treated as a digit and \( x_0 > x_1 > \dots \).
A | Set of sets of interest. |
void adiar::zdd_minelem | ( | const zdd & | A, |
const consumer< zdd::label_type > & | cb | ||
) |
Retrieves the lexicographically smallest set a in A.
A | Set of sets of interest. |
cb | Callback function that is called with the variables of the smallest set in ascending order of the levels of A . |
A != zdd_empty()
OutputIt adiar::zdd_minelem | ( | const zdd & | A, |
OutputIt | iter | ||
) |
Retrieves the lexicographically smallest set a in A.
A | Set of sets of interest. |
begin | Single-pass forward iterator for where to place the output. |
zdd::label_type adiar::zdd_minvar | ( | const zdd & | A | ) |
Get the minimal occurring variable in the family.
invalid_argument | If A is a terminal. |
zdd adiar::zdd_nithvar | ( | zdd::label_type | var | ) |
The set of bitvectors over the globally set domain where var is set to false.
var | The variable to be forced to false. |
domain_isset() == true
and the variable var
should occur in the global domain. zdd adiar::zdd_nithvar | ( | zdd::label_type | var, |
const generator< zdd::label_type > & | dom | ||
) |
The set of bitvectors over a given domain where var is set to false.
Creates a ZDD with a don't care chain of nodes to the true child except for the node for var
; this one instead is forced to be true.
var | The variable to be forced to false. |
dom | Generator function of the domain in descending order. The variables should be smaller than or equals to zdd::max_label . |
var
should occur in dom
.invalid_argument | If dom is not in descending order. |
zdd adiar::zdd_nithvar | ( | zdd::label_type | var, |
ForwardIt | begin, | ||
ForwardIt | end | ||
) |
The set of bitvectors over a given domain where var is set to false.
var | The variable to be forced to false. |
begin | Single-pass forward iterator that provides the domain's variables in descending order. The variables may not exceed zdd::max_label . |
end | Marks the end for begin . |
var
should occur in dom
.invalid_argument | If the iterator does not provide values in descending order. |
Subset that do not include the top variable.
A | Family of set |
invalid_argument | If A is a terminal. |
__zdd adiar::zdd_offset | ( | const zdd & | A, |
const generator< zdd::label_type > & | vars | ||
) |
Subset that do not include the given set of variables.
A | Family of set |
vars | Generator function of the variable labels to filter on in ascending order. The values generated should not exceed zdd::max_label . |
__zdd adiar::zdd_offset | ( | const zdd & | A, |
ForwardIt | begin, | ||
ForwardIt | end | ||
) |
Subset that do not include the given set of variables.
A | Family of set |
begin | Single-pass forward iterator that provides the variables to filter out in ascending order. These values may not exceed zdd::max_label . |
end | Marks the end for begin . |
__zdd adiar::zdd_offset | ( | const zdd & | A, |
zdd::label_type | var | ||
) |
Subset that do not include the given element.
A | Family of set |
var | Variable to include. |
Subset that do include the top variable.
A | Family of set |
invalid_argument | If A is a terminal. |
__zdd adiar::zdd_onset | ( | const zdd & | A, |
const generator< zdd::label_type > & | vars | ||
) |
Subset that do include the given set of variables.
A | Family of set |
vars | Generator function of the variable labels to filter on in ascending order. The values generated may not exceed zdd::max_label |
__zdd adiar::zdd_onset | ( | const zdd & | A, |
ForwardIt | begin, | ||
ForwardIt | end | ||
) |
Subset that do include the given set of variables.
A | Family of set |
begin | Single-pass forward iterator that provides the variables to filter out in ascending order. These values may not exceed zdd::max_label |
end | Marks the end for begin . |
__zdd adiar::zdd_onset | ( | const zdd & | A, |
zdd::label_type | var | ||
) |
Subset that do include the given element.
A | Family of set |
var | Variable to include. |
zdd adiar::zdd_point | ( | const generator< zdd::label_type > & | vars | ) |
The family { { 1, 2, ..., k } } with a single bit-vector.
Creates the ZDD for a set with a single bit-vector, i.e. a point.
vars | Generator function of the variables in descending order. The variables may not exceed zdd::max_label . |
invalid_argument | If vars are not in descending order. |
zdd adiar::zdd_point | ( | ForwardIt | begin, |
ForwardIt | end | ||
) |
The family { { 1, 2, ..., k } } with a single bit-vector.
begin | Single-pass forward iterator that provides the variables in descending order. The variables may not exceed zdd::max_label . |
end | Marks the end for begin . |
invalid_argument | If the iterator does not provide values in descending order. |
zdd adiar::zdd_powerset | ( | const generator< zdd::label_type > & | vars | ) |
The powerset of all given variables.
Creates a ZDD with a don't care chain of nodes to the true child.
vars | Generator function of the variables in descending order. These values may not exceed zdd::max_label . |
invalid_argument | If vars are not in ascending order. |
zdd adiar::zdd_powerset | ( | ForwardIt | begin, |
ForwardIt | end | ||
) |
The powerset of all given variables.
begin | Single-pass forward iterator that provides the variables in descending order. The variables may not exceed zdd::max_label |
end | Marks the end for begin . |
invalid_argument | If the iterator does not provide values in descending order. |
__zdd adiar::zdd_project | ( | const zdd & | A, |
const generator< zdd::label_type > & | dom | ||
) |
Project family of sets onto a domain, i.e. remove from every set all variables not within the domain.
A | Family of sets to project |
dom | Generator function, that produces the variables of the domain in descending order. They should not exceed zdd::max_label . |
__zdd adiar::zdd_project | ( | const zdd & | A, |
const predicate< zdd::label_type > & | dom | ||
) |
Project family of sets onto a domain, i.e. remove from every set all variables not within the domain.
A | Family of sets to project |
dom | Predicate function that defines the domain. |
__zdd adiar::zdd_project | ( | const zdd & | A, |
ForwardIt | begin, | ||
ForwardIt | end | ||
) |
Project family of sets onto a domain, i.e. remove from every set all variables not within the domain.
A | Family of sets to project |
begin | Single-pass forward iterator that provides the domain in descending order. Its values should not exceed zdd::max_label |
end | Marks the end for begin . |
zdd adiar::zdd_singleton | ( | zdd::label_type | var | ) |
The family { {i} } .
Creates a ZDD of a single node with label var
and the children false and true. The given label must be smaller than zdd::max_label
.
var | The label of the desired variable to include |
invalid_argument | If var is a too large value. |
zdd adiar::zdd_singletons | ( | const generator< zdd::label_type > & | vars | ) |
The family { {1}, {2}, ..., {k} }.
Creates a ZDD with a chain of nodes on the 'low' arc to the true child, and false otherwise.
vars | Generator function of the variables in descending order. The variables may not exceed zdd::max_label . |
invalid_argument | If vars are not in descending order. |
zdd adiar::zdd_singletons | ( | ForwardIt | begin, |
ForwardIt | end | ||
) |
The family { {1}, {2}, ..., {k} }.
begin | Single-pass forward iterator that provides the variables in descending order. The variables may not exceed zdd::max_label . |
end | Marks the end for begin . |
invalid_argument | If the iterator does not provide values in descending order. |
void adiar::zdd_support | ( | const zdd & | A, |
const consumer< zdd::label_type > & | cb | ||
) |
Get (in ascending order) all of the variable labels that occur in the family.
A | ZDD of interest. |
cb | Callback function that consumes the variable labels. |
OutputIt adiar::zdd_support | ( | const zdd & | A, |
OutputIt | iter | ||
) |
Copy all of the variable labels (in ascending order) that occur in the family into the given container.
A | ZDD of interest. |
begin | Single-pass output iterator for where to place the output. |
zdd adiar::zdd_terminal | ( | bool | value | ) |
zdd adiar::zdd_top | ( | ) |
Top of the powerset lattice.
Since no set of variables is given, the global Variable Domain is used (if available).
zdd adiar::zdd_top | ( | const generator< zdd::label_type > & | dom | ) |
Top of the powerset lattice.
dom | Generator of the variables in descending order. These values may not exceed zdd::max_label . |
|
inline |
Top of the powerset lattice.
begin | Single-pass forward iterator that provides the domain's variables in descending order. These values may not exceed zdd::max_label . |
end | Marks the end for begin . |
zdd::label_type adiar::zdd_topvar | ( | const zdd & | f | ) |
Get the root's variable label.
invalid_argument | If A is a terminal. |
The union of two families of sets.
zdd adiar::zdd_vars | ( | const generator< zdd::label_type > & | vars | ) |
The family { { 1, 2, ..., k } }.
Creates a ZDD with a chain of nodes on the 'high' arc to the true child, and false otherwise.
vars | Generator function of the variables in descending order. The variables may not exceed zdd::max_label . |
invalid_argument | If vars are not in descending order. |
zdd adiar::zdd_vars | ( | ForwardIt | begin, |
ForwardIt | end | ||
) |
The family { { 1, 2, ..., k } }.
begin | Single-pass forward iterator that provides the variables in descending order. The variables may not exceed zdd::max_label . |
end | Marks the end for begin . |
invalid_argument | If the iterator does not provide values in descending order. |