spot
0.9.1
|
Map BDD variables to formulae. More...
#include <tgba/bdddict.hh>
Classes | |
class | anon_free_list |
struct | bdd_info |
Public Types | |
enum | var_type { anon = 0, now, next, var, acc } |
typedef std::map< const ltl::formula *, int > | fv_map |
Formula-to-BDD-variable maps. | |
typedef std::map< int, const ltl::formula * > | vf_map |
BDD-variable-to-formula maps. | |
typedef std::set< const void * > | ref_set |
BDD-variable reference counts. | |
typedef std::vector< bdd_info > | bdd_info_map |
Public Member Functions | |
bdd_dict () | |
~bdd_dict () | |
int | register_proposition (const ltl::formula *f, const void *for_me) |
Register an atomic proposition. | |
void | register_propositions (bdd f, const void *for_me) |
Register BDD variables as atomic propositions. | |
int | register_state (const ltl::formula *f, const void *for_me) |
Register a couple of Now/Next variables. | |
int | register_acceptance_variable (const ltl::formula *f, const void *for_me) |
Register an atomic proposition. | |
int | register_clone_acc (int var, const void *for_me) |
Clone an acceptance variable VAR for FOR_ME. | |
void | register_acceptance_variables (bdd f, const void *for_me) |
Register BDD variables as acceptance variables. | |
const ltl::formula * | oneacc_to_formula (bdd oneacc) const |
Convert one acceptance condition into the associated formula. | |
const ltl::formula * | oneacc_to_formula (int var) const |
Convert one acceptance condition into the associated formula. | |
int | register_anonymous_variables (int n, const void *for_me) |
Register anonymous BDD variables. | |
void | register_all_variables_of (const void *from_other, const void *for_me) |
Duplicate the variable usage of another object. | |
void | unregister_all_my_variables (const void *me) |
Release all variables used by an object. | |
void | unregister_variable (int var, const void *me) |
Release a variable used by me. | |
std::ostream & | dump (std::ostream &os) const |
Dump all variables for debugging. | |
void | assert_emptiness () const |
Make sure the dictionary is empty. | |
int | allocate_variables (int n) |
Allocate n BDD variables. | |
void | release_variables (int base, int n) |
Release n BDD variables starting at base. | |
bool | is_registered_proposition (const ltl::formula *f, const void *by_me) |
bool | is_registered_state (const ltl::formula *f, const void *by_me) |
bool | is_registered_acceptance_variable (const ltl::formula *f, const void *by_me) |
Static Public Member Functions | |
static void | initialize () |
Initialize the BDD library. | |
Public Attributes | |
fv_map | now_map |
Maps formulae to "Now" BDD variables. | |
fv_map | var_map |
Maps atomic propositions to BDD variables. | |
fv_map | acc_map |
Maps acceptance conditions to BDD variables. | |
bdd_info_map | bdd_map |
bddPair * | next_to_now |
Map Next variables to Now variables. | |
bddPair * | now_to_next |
Map Now variables to Next variables. | |
Protected Types | |
typedef std::map< const void *, anon_free_list > | free_anonymous_list_of_type |
List of unused anonymous variable number for each automaton. | |
Protected Attributes | |
free_anonymous_list_of_type | free_anonymous_list_of |
int | lvarnum |
number of variables in use in this allocator. | |
Static Protected Attributes | |
static bool | initialized |
Whether the BDD library has been initialized. | |
Private Member Functions | |
bdd_dict (const bdd_dict &other) | |
bdd_dict & | operator= (const bdd_dict &other) |
Map BDD variables to formulae.
The BDD library uses integers to designate Boolean variables in its decision diagrams. This class is used to map such integers to objects actually used in Spot. These objects are usually atomic propositions, but they can also be acceptance conditions, or "Now/Next" variables (although the latter should be eventually removed).
typedef std::vector<bdd_info> spot::bdd_dict::bdd_info_map |
typedef std::map<const void*, anon_free_list> spot::bdd_dict::free_anonymous_list_of_type [protected] |
List of unused anonymous variable number for each automaton.
typedef std::map<const ltl::formula*, int> spot::bdd_dict::fv_map |
Formula-to-BDD-variable maps.
typedef std::set<const void*> spot::bdd_dict::ref_set |
BDD-variable reference counts.
typedef std::map<int, const ltl::formula*> spot::bdd_dict::vf_map |
BDD-variable-to-formula maps.
spot::bdd_dict::bdd_dict | ( | const bdd_dict & | other | ) | [private] |
int spot::bdd_allocator::allocate_variables | ( | int | n | ) | [inherited] |
Allocate n BDD variables.
void spot::bdd_dict::assert_emptiness | ( | ) | const |
Make sure the dictionary is empty.
This will print diagnostics and abort if the dictionary is not empty. Use for debugging.
std::ostream& spot::bdd_dict::dump | ( | std::ostream & | os | ) | const |
Dump all variables for debugging.
os | The output stream. |
static void spot::bdd_allocator::initialize | ( | ) | [static, inherited] |
Initialize the BDD library.
bool spot::bdd_dict::is_registered_acceptance_variable | ( | const ltl::formula * | f, |
const void * | by_me | ||
) |
bool spot::bdd_dict::is_registered_proposition | ( | const ltl::formula * | f, |
const void * | by_me | ||
) |
Check whether formula f has already been registered by by_me.
bool spot::bdd_dict::is_registered_state | ( | const ltl::formula * | f, |
const void * | by_me | ||
) |
const ltl::formula* spot::bdd_dict::oneacc_to_formula | ( | bdd | oneacc | ) | const |
Convert one acceptance condition into the associated formula.
This version accepts a conjunction of Acc variables, in which only one must be positive. This positive variable will be converted back into the associated formula.
The returned formula is not cloned, and is valid until the BDD variable used in oneacc are unregistered.
const ltl::formula* spot::bdd_dict::oneacc_to_formula | ( | int | var | ) | const |
Convert one acceptance condition into the associated formula.
This version takes the number of a BDD variable that must has been returned by a call to register_acceptance_variable().
The returned formula is not cloned, and is valid until the BDD variable var is unregistered.
int spot::bdd_dict::register_acceptance_variable | ( | const ltl::formula * | f, |
const void * | for_me | ||
) |
Register an atomic proposition.
Return (and maybe allocate) a BDD variable designating an acceptance set associated to formula f. The for_me argument should point to the object using this BDD variable, this is used for reference counting. It is perfectly safe to call this function several time with the same arguments.
Referenced by spot::taa_tgba_labelled< std::string, string_hash >::add_acceptance_condition(), and spot::explicit_graph< State, tgba >::declare_acceptance_condition().
void spot::bdd_dict::register_acceptance_variables | ( | bdd | f, |
const void * | for_me | ||
) |
Register BDD variables as acceptance variables.
Register all variables occurring in f as acceptance variables used by for_me. This assumes that these acceptance variables are already known from the dictionary (i.e., they have already been registered by register_acceptance_variable() for another automaton).
Referenced by spot::explicit_graph< State, tgba >::add_acceptance_conditions(), spot::explicit_graph< State, tgba >::copy_acceptance_conditions_of(), and spot::explicit_graph< State, tgba >::set_acceptance_conditions().
void spot::bdd_dict::register_all_variables_of | ( | const void * | from_other, |
const void * | for_me | ||
) |
Duplicate the variable usage of another object.
This tells this dictionary that the for_me object will be using the same BDD variables as the from_other objects. This ensure that the variables won't be freed when from_other is deleted if from_other is still alive.
int spot::bdd_dict::register_anonymous_variables | ( | int | n, |
const void * | for_me | ||
) |
Register anonymous BDD variables.
Return (and maybe allocate) n consecutive BDD variables which will be used only by for_me.
int spot::bdd_dict::register_clone_acc | ( | int | var, |
const void * | for_me | ||
) |
Clone an acceptance variable VAR for FOR_ME.
This is used in products TGBAs when both operands share the same acceptance variables but they need to be distinguished in the result.
int spot::bdd_dict::register_proposition | ( | const ltl::formula * | f, |
const void * | for_me | ||
) |
Register an atomic proposition.
Return (and maybe allocate) a BDD variable designating formula f. The for_me argument should point to the object using this BDD variable, this is used for reference counting. It is perfectly safe to call this function several time with the same arguments.
void spot::bdd_dict::register_propositions | ( | bdd | f, |
const void * | for_me | ||
) |
Register BDD variables as atomic propositions.
Register all variables occurring in f as atomic propositions used by for_me. This assumes that these atomic propositions are already known from the dictionary (i.e., they have already been registered by register_proposition() for another automaton).
Referenced by spot::explicit_graph< State, tgba >::add_conditions().
int spot::bdd_dict::register_state | ( | const ltl::formula * | f, |
const void * | for_me | ||
) |
Register a couple of Now/Next variables.
Return (and maybe allocate) two BDD variables for a state associated to formula f. The for_me argument should point to the object using this BDD variable, this is used for reference counting. It is perfectly safe to call this function several time with the same arguments.
void spot::bdd_allocator::release_variables | ( | int | base, |
int | n | ||
) | [inherited] |
Release n BDD variables starting at base.
void spot::bdd_dict::unregister_all_my_variables | ( | const void * | me | ) |
Release all variables used by an object.
Usually called in the destructor if me.
Referenced by spot::explicit_graph< State, tgba >::~explicit_graph().
void spot::bdd_dict::unregister_variable | ( | int | var, |
const void * | me | ||
) |
Release a variable used by me.
Maps acceptance conditions to BDD variables.
Referenced by spot::taa_tgba_labelled< std::string, string_hash >::add_acceptance_condition(), and spot::explicit_graph< State, tgba >::get_acceptance_condition().
bool spot::bdd_allocator::initialized [static, protected, inherited] |
Whether the BDD library has been initialized.
int spot::bdd_allocator::lvarnum [protected, inherited] |
number of variables in use in this allocator.
bddPair* spot::bdd_dict::next_to_now |
Map Next variables to Now variables.
Use with BuDDy's bdd_replace() function.
Maps formulae to "Now" BDD variables.
bddPair* spot::bdd_dict::now_to_next |
Map Now variables to Next variables.
Use with BuDDy's bdd_replace() function.
Maps atomic propositions to BDD variables.