15 #ifndef CPROVER_SOLVERS_BDD_BDD_MINIBDD_H
16 #define CPROVER_SOLVERS_BDD_BDD_MINIBDD_H
18 #include <unordered_map>
34 return node->node_number <= 1;
39 return node->node_number == 0;
107 return bddt(!(*
this));
112 return bddt(*
this | other);
117 return bddt(*
this & other);
122 return bddt(*
this ^ other);
172 return emplace_result.first->second;
Manager for BDD creation.
bdd_nodet bdd_node(const bddt &bdd) const
std::unordered_map< std::size_t, std::size_t > bdd_var_to_index
bdd_managert(const bdd_managert &)=delete
bddt bdd_variable(bdd_nodet::indext index)
std::unordered_map< std::size_t, bddt > index_to_bdd
Low level access to the structure of the BDD, read-only.
const std::unordered_map< std::size_t, std::size_t > & bdd_var_to_index
indext index() const
Label on the node, corresponds to the index of a Boolean variable.
unsigned int indext
Type of indexes of Boolean variables.
DdNode * idt
Return type for id()
bool is_complement() const
bdd_nodet(mini_bdd_nodet *node, const std::unordered_map< std::size_t, std::size_t > &bdd_var_to_index)
idt id() const
Unique identifier of the node.
bool is_constant() const
is_constant has to be true for true and false and to distinguish between the two, is_complement has t...
bdd_nodet then_branch() const
bdd_nodet else_branch() const
Logical operations on BDDs.
bool equals(const bddt &other) const
bddt bdd_xor(const bddt &other) const
bddt constrain(const bddt &other)
static bddt bdd_ite(const bddt &i, const bddt &t, const bddt &e)
bddt bdd_or(const bddt &other) const
bddt & operator=(const bddt &other)
bddt(const mini_bddt &bdd)
bddt bdd_and(const bddt &other) const
mini_bddt Var(const std::string &label)
const mini_bddt & False() const
const mini_bddt & True() const
class mini_bdd_nodet * node
mini_bddt & operator=(const mini_bddt &)
A minimalistic BDD library, following Bryant's original paper and Andersen's lecture notes.
std::string to_string(const string_not_contains_constraintt &expr)
Used for debug printing.