spot  2.11.6
Classes | Public Types | Public Member Functions | Public Attributes | List of all members

Map BDD variables to formulae. More...

#include <spot/twa/bdddict.hh>

Collaboration diagram for spot::bdd_dict:

Classes

struct  bdd_info
 

Public Types

enum  var_type { anon = 0 , var , acc }
 
typedef std::map< formula, int > fv_map
 Formula-to-BDD-variable maps. More...
 
typedef std::map< int, formulavf_map
 BDD-variable-to-formula maps. More...
 
typedef std::set< const void * > ref_set
 BDD-variable reference counts. More...
 
typedef std::vector< bdd_infobdd_info_map
 

Public Member Functions

 ~bdd_dict ()
 Destroy the BDD dict. More...
 
int varnum (formula f)
 
void unregister_all_my_variables (const void *me)
 Release all variables used by an object. More...
 
std::ostream & dump (std::ostream &os) const
 Dump all variables for debugging. More...
 
void assert_emptiness () const
 Make sure the dictionary is empty. More...
 
int register_proposition (formula f, const void *for_me)
 Register an atomic proposition. More...
 
template<typename T >
int register_proposition (formula f, std::shared_ptr< T > for_me)
 Register an atomic proposition. More...
 
int has_registered_proposition (formula f, const void *me)
 whether a proposition has already been registered More...
 
template<typename T >
int has_registered_proposition (formula f, std::shared_ptr< T > for_me)
 whether a proposition has already been registered More...
 
int register_acceptance_variable (formula f, const void *for_me)
 Register an acceptance variable. More...
 
template<typename T >
int register_acceptance_variable (formula f, std::shared_ptr< T > for_me)
 Register an acceptance variable. More...
 
int register_anonymous_variables (int n, const void *for_me)
 Register anonymous BDD variables. More...
 
template<typename T >
int register_anonymous_variables (int n, std::shared_ptr< T > for_me)
 Register anonymous BDD variables. More...
 
void register_all_variables_of (const void *from_other, const void *for_me)
 Duplicate the variable usage of another object. More...
 
template<typename T >
void register_all_variables_of (const void *from_other, std::shared_ptr< T > for_me)
 Duplicate the variable usage of another object. More...
 
template<typename T >
void register_all_variables_of (std::shared_ptr< T > from_other, const void *for_me)
 Duplicate the variable usage of another object. More...
 
template<typename T , typename U >
void register_all_variables_of (std::shared_ptr< T > from_other, std::shared_ptr< U > for_me)
 Duplicate the variable usage of another object. More...
 
void unregister_variable (int var, const void *me)
 Release a variable used by me. More...
 
template<typename T >
void unregister_variable (int var, std::shared_ptr< T > me)
 Release a variable used by me. More...
 

Public Attributes

fv_map var_map
 Maps atomic propositions to BDD variables. More...
 
fv_map acc_map
 Maps acceptance conditions to BDD variables. More...
 
bdd_info_map bdd_map
 

Detailed Description

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.

When a BDD variable is registered using a bdd_dict, it is always associated to a "user" (or "owner") object. This is done by supplying the bdd_dict with a pointer to the intended user of the variable. When the user object dies, it should release the BDD variables it was using by calling (for instance) unregister_all_my_variables(), giving the same pointer. Variables can also by unregistered one by one using unregister_variable().

Member Typedef Documentation

◆ fv_map

typedef std::map<formula, int> spot::bdd_dict::fv_map

Formula-to-BDD-variable maps.

◆ ref_set

typedef std::set<const void*> spot::bdd_dict::ref_set

BDD-variable reference counts.

◆ vf_map

typedef std::map<int, formula> spot::bdd_dict::vf_map

BDD-variable-to-formula maps.

Constructor & Destructor Documentation

◆ ~bdd_dict()

spot::bdd_dict::~bdd_dict ( )

Destroy the BDD dict.

This always calls assert_emptiness() to diagnose cases where variables have not been unregistered.

Member Function Documentation

◆ assert_emptiness()

void spot::bdd_dict::assert_emptiness ( ) const

Make sure the dictionary is empty.

This will print diagnostics if the dictionary is not empty. Use for debugging. This is called automatically by the destructor. When Spot is compiled in development mode (i.e., with ./configure –enable-devel), this function will abort if the dictionary is not empty.

The errors detected by this function usually indicate missing calls to unregister_variable() or unregister_all_my_variables().

◆ dump()

std::ostream& spot::bdd_dict::dump ( std::ostream &  os) const

Dump all variables for debugging.

Parameters
osThe output stream.

◆ has_registered_proposition() [1/2]

int spot::bdd_dict::has_registered_proposition ( formula  f,
const void *  me 
)

whether a proposition has already been registered

If f has been registered for me, this returns a non-negative value that is the BDD variable number. Otherwise this returns -1.

◆ has_registered_proposition() [2/2]

template<typename T >
int spot::bdd_dict::has_registered_proposition ( formula  f,
std::shared_ptr< T >  for_me 
)
inline

whether a proposition has already been registered

If f has been registered for me, this returns a non-negative value that is the BDD variable number. Otherwise this returns -1.

◆ register_acceptance_variable() [1/2]

int spot::bdd_dict::register_acceptance_variable ( formula  f,
const void *  for_me 
)

Register an acceptance variable.

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.

Returns
The variable number. Use bdd_ithvar() or bdd_nithvar() to convert this to a BDD.

◆ register_acceptance_variable() [2/2]

template<typename T >
int spot::bdd_dict::register_acceptance_variable ( formula  f,
std::shared_ptr< T >  for_me 
)
inline

Register an acceptance variable.

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.

Returns
The variable number. Use bdd_ithvar() or bdd_nithvar() to convert this to a BDD.

◆ register_all_variables_of() [1/4]

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 ensures that the variables won't be freed when from_other is deleted if from_other is still alive.

◆ register_all_variables_of() [2/4]

template<typename T >
void spot::bdd_dict::register_all_variables_of ( const void *  from_other,
std::shared_ptr< T >  for_me 
)
inline

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 ensures that the variables won't be freed when from_other is deleted if from_other is still alive.

◆ register_all_variables_of() [3/4]

template<typename T >
void spot::bdd_dict::register_all_variables_of ( std::shared_ptr< T >  from_other,
const void *  for_me 
)
inline

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 ensures that the variables won't be freed when from_other is deleted if from_other is still alive.

◆ register_all_variables_of() [4/4]

template<typename T , typename U >
void spot::bdd_dict::register_all_variables_of ( std::shared_ptr< T >  from_other,
std::shared_ptr< U >  for_me 
)
inline

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 ensures that the variables won't be freed when from_other is deleted if from_other is still alive.

◆ register_anonymous_variables() [1/2]

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.

Returns
The variable number. Use bdd_ithvar() or bdd_nithvar() to convert this to a BDD.

◆ register_anonymous_variables() [2/2]

template<typename T >
int spot::bdd_dict::register_anonymous_variables ( int  n,
std::shared_ptr< T >  for_me 
)
inline

Register anonymous BDD variables.

Return (and maybe allocate) n consecutive BDD variables which will be used only by for_me.

Returns
The variable number. Use bdd_ithvar() or bdd_nithvar() to convert this to a BDD.

◆ register_proposition() [1/2]

int spot::bdd_dict::register_proposition ( 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.

Returns
The variable number. Use bdd_ithvar() or bdd_nithvar() to convert this to a BDD.

◆ register_proposition() [2/2]

template<typename T >
int spot::bdd_dict::register_proposition ( formula  f,
std::shared_ptr< T >  for_me 
)
inline

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.

Returns
The variable number. Use bdd_ithvar() or bdd_nithvar() to convert this to a BDD.

◆ unregister_all_my_variables()

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.

◆ unregister_variable() [1/2]

void spot::bdd_dict::unregister_variable ( int  var,
const void *  me 
)

Release a variable used by me.

◆ unregister_variable() [2/2]

template<typename T >
void spot::bdd_dict::unregister_variable ( int  var,
std::shared_ptr< T >  me 
)
inline

Release a variable used by me.

Member Data Documentation

◆ acc_map

fv_map spot::bdd_dict::acc_map

Maps acceptance conditions to BDD variables.

◆ var_map

fv_map spot::bdd_dict::var_map

Maps atomic propositions to BDD variables.


The documentation for this class was generated from the following file:

Please direct any question, comment, or bug report to the Spot mailing list at spot@lrde.epita.fr.
Generated on Fri Feb 27 2015 10:00:07 for spot by doxygen 1.9.1