Initial code for TGBA (Transition Generalized Bchi Automata).
Contains tgba_bdd, a BDD-encoded TGBA, and ltl_to_tgba, a LTL-to-TGBA translator using Couvreur's algorithm. * src/Makefile.am (SUBDIRS): Add tgba. (libspot_la_LIBADD): Add tgba/libtgba.la. * src/tgba/Makefile.am, src/tgba/bddfactory.cc, src/tgba/bddfactory.hh, src/tgba/dictunion.cc, src/tgba/dictunion.hh, src/tgba/ltl2tgba.cc, src/tgba/ltl2tgba.hh, src/tgba/state.hh, src/tgba/statebdd.cc, src/tgba/statebdd.hh, src/tgba/succiter.hh, src/tgba/succiterconcrete.cc, src/tgba/succiterconcrete.hh, src/tgba/succlist.hh, src/tgba/tgba.hh, src/tgba/tgbabddconcrete.cc, src/tgba/tgbabddconcrete.hh, src/tgba/tgbabddconcretefactory.cc, src/tgba/tgbabddconcretefactory.hh, src/tgba/tgbabddconcreteproduct.cc, src/tgba/tgbabddconcreteproduct.hh, src/tgba/tgbabddcoredata.cc, src/tgba/tgbabddcoredata.hh, src/tgba/tgbabdddict.cc, src/tgba/tgbabdddict.hh, src/tgba/tgbabddfactory.hh, src/tgba/tgbabddtranslatefactory.cc, src/tgba/tgbabddtranslatefactory.hh: New files.
This commit is contained in:
parent
5100c197a2
commit
c03934140f
32 changed files with 1263 additions and 2 deletions
93
src/tgba/tgbabddtranslatefactory.cc
Normal file
93
src/tgba/tgbabddtranslatefactory.cc
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
#include "tgbabddtranslatefactory.hh"
|
||||
#include "dictunion.hh"
|
||||
|
||||
namespace spot
|
||||
{
|
||||
tgba_bdd_translate_factory::tgba_bdd_translate_factory
|
||||
(const tgba_bdd_concrete& from, const tgba_bdd_dict& to)
|
||||
: dict_(to)
|
||||
{
|
||||
bddPair* rewrite = compute_pairs(from.get_dict());
|
||||
|
||||
const tgba_bdd_core_data& in = from.get_core_data();
|
||||
|
||||
data_.relation = bdd_replace(in.relation, rewrite);
|
||||
data_.now_set = bdd_replace(in.now_set, rewrite);
|
||||
data_.negnow_set = bdd_replace(in.negnow_set, rewrite);
|
||||
data_.notnow_set = bdd_replace(in.notnow_set, rewrite);
|
||||
data_.notvar_set = bdd_replace(in.notvar_set, rewrite);
|
||||
data_.notprom_set = bdd_replace(in.notprom_set, rewrite);
|
||||
|
||||
init_ = bdd_replace(from.get_init_state().as_bdd(), rewrite);
|
||||
|
||||
bdd_freepair(rewrite);
|
||||
}
|
||||
|
||||
tgba_bdd_translate_factory::~tgba_bdd_translate_factory()
|
||||
{
|
||||
}
|
||||
|
||||
bddPair*
|
||||
tgba_bdd_translate_factory::compute_pairs(const tgba_bdd_dict& from)
|
||||
{
|
||||
bddPair* rewrite = bdd_newpair();
|
||||
|
||||
tgba_bdd_dict::fv_map::const_iterator i_from;
|
||||
tgba_bdd_dict::fv_map::const_iterator i_to;
|
||||
|
||||
from.dump(std::cerr);
|
||||
|
||||
for (i_from = from.now_map.begin(); i_from != from.now_map.end(); ++i_from)
|
||||
{
|
||||
i_to = dict_.now_map.find(i_from->first);
|
||||
assert(i_to != dict_.now_map.end());
|
||||
|
||||
bdd_setpair(rewrite, i_from->second, i_to->second);
|
||||
bdd_setpair(rewrite, i_from->second + 1, i_to->second + 1);
|
||||
bdd_setpair(data_.next_to_now, i_to->second + 1, i_to->second);
|
||||
}
|
||||
for (i_from = from.var_map.begin(); i_from != from.var_map.end(); ++i_from)
|
||||
{
|
||||
i_to = dict_.var_map.find(i_from->first);
|
||||
assert(i_to != dict_.var_map.end());
|
||||
bdd_setpair(rewrite, i_from->second, i_to->second);
|
||||
}
|
||||
for (i_from = from.prom_map.begin();
|
||||
i_from != from.prom_map.end();
|
||||
++i_from)
|
||||
{
|
||||
i_to = dict_.prom_map.find(i_from->first);
|
||||
assert(i_to != dict_.prom_map.end());
|
||||
bdd_setpair(rewrite, i_from->second, i_to->second);
|
||||
}
|
||||
return rewrite;
|
||||
}
|
||||
|
||||
const tgba_bdd_core_data&
|
||||
tgba_bdd_translate_factory::get_core_data() const
|
||||
{
|
||||
return data_;
|
||||
}
|
||||
|
||||
const tgba_bdd_dict&
|
||||
tgba_bdd_translate_factory::get_dict() const
|
||||
{
|
||||
return dict_;
|
||||
}
|
||||
|
||||
bdd
|
||||
tgba_bdd_translate_factory::get_init_state() const
|
||||
{
|
||||
return init_;
|
||||
}
|
||||
|
||||
|
||||
tgba_bdd_concrete
|
||||
defrag(const tgba_bdd_concrete& a)
|
||||
{
|
||||
const tgba_bdd_dict& ad = a.get_dict();
|
||||
tgba_bdd_dict u = tgba_bdd_dict_union(ad, ad);
|
||||
tgba_bdd_translate_factory f(a, u);
|
||||
return tgba_bdd_concrete(f, f.get_init_state());
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue