spot  0.8.2
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Member Functions
spot::bdd_dict Class Reference

Map BDD variables to formulae. More...

#include <tgba/bdddict.hh>

Inheritance diagram for spot::bdd_dict:
Inheritance graph
[legend]
Collaboration diagram for spot::bdd_dict:
Collaboration graph
[legend]

List of all members.

Classes

class  anon_free_list

Public Types

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::map< int, int > cc_map
 Clone counts.

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.
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.
vf_map now_formula_map
 Maps "Now" BDD variables to formulae.
fv_map var_map
 Maps atomic propositions to BDD variables.
vf_map var_formula_map
 Maps BDD variables to atomic propositions.
fv_map acc_map
 Maps acceptance conditions to BDD variables.
vf_map acc_formula_map
 Maps BDD variables to acceptance conditions.
cc_map clone_counts
bddPair * next_to_now
 Map Next variables to Now variables.
bddPair * now_to_next
 Map Now variables to Next variables.

Protected Types

typedef std::set< const void * > ref_set
 BDD-variable reference counts.
typedef std::map< int, ref_setvr_map
typedef std::map< const void
*, anon_free_list
free_anonymous_list_of_type
 List of unused anonymous variable number for each automaton.

Protected Member Functions

void unregister_variable (vr_map::iterator &cur, const void *me)

Protected Attributes

vr_map var_refs
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_dictoperator= (const bdd_dict &other)

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, or "Now/Next" variables (although the latter should be eventually removed).


Member Typedef Documentation

typedef std::map<int, int> spot::bdd_dict::cc_map

Clone counts.

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 [protected]

BDD-variable reference counts.

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

BDD-variable-to-formula maps.

typedef std::map<int, ref_set> spot::bdd_dict::vr_map [protected]

Constructor & Destructor Documentation

spot::bdd_dict::bdd_dict ( const bdd_dict other) [private]

Member Function Documentation

int spot::bdd_allocator::allocate_variables ( int  n) [inherited]

Allocate n BDD variables.

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.

Parameters:
osThe 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 
)
bdd_dict& spot::bdd_dict::operator= ( const bdd_dict other) [private]
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.

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

Referenced by spot::taa_tgba_labelled< std::string, string_hash >::add_acceptance_condition(), and spot::tgba_explicit_labelled< std::string, string_hash >::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).

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.

Returns:
The variable number. Use bdd_ithvar() or bdd_nithvar() to convert this to a BDD.
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.

Returns:
The variable number. Use bdd_ithvar() or bdd_nithvar() to convert this to a BDD.
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).

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.

Returns:
The first variable number. Add one to get the second variable. Use bdd_ithvar() or bdd_nithvar() to convert this to a BDD.
void spot::bdd_allocator::release_variables ( int  base,
int  n 
) [inherited]

Release n BDD variables starting at base.

Release all variables used by an object.

Usually called in the destructor if me.

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

Release a variable used by me.

void spot::bdd_dict::unregister_variable ( vr_map::iterator &  cur,
const void *  me 
) [protected]

Member Data Documentation

Maps BDD variables to acceptance conditions.

Maps acceptance conditions to BDD variables.

Referenced by spot::taa_tgba_labelled< std::string, string_hash >::add_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.

Map Next variables to Now variables.

Use with BuDDy's bdd_replace() function.

Maps "Now" BDD variables to formulae.

Maps formulae to "Now" BDD variables.

Map Now variables to Next variables.

Use with BuDDy's bdd_replace() function.

Maps BDD variables to atomic propositions.

Maps atomic propositions to BDD variables.


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

Please comment this page and report errors about it on the RefDocComments page.
Generated on Thu Jan 19 2012 19:33:04 for spot by doxygen 1.7.6.1