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.
64 lines
1.3 KiB
C++
64 lines
1.3 KiB
C++
#include "succiterconcrete.hh"
|
|
|
|
namespace spot
|
|
{
|
|
tgba_succ_iterator_concrete::tgba_succ_iterator_concrete
|
|
(const tgba_bdd_core_data& d, bdd successors)
|
|
: data_(d), succ_set_(successors), next_succ_set_(successors),
|
|
current_(bddfalse)
|
|
{
|
|
}
|
|
|
|
tgba_succ_iterator_concrete::~tgba_succ_iterator_concrete()
|
|
{
|
|
}
|
|
|
|
void
|
|
tgba_succ_iterator_concrete::first()
|
|
{
|
|
next_succ_set_ = succ_set_;
|
|
if (!done())
|
|
next();
|
|
}
|
|
|
|
void
|
|
tgba_succ_iterator_concrete::next()
|
|
{
|
|
assert(!done());
|
|
|
|
// FIXME: Iterating on the successors this way (calling bdd_satone
|
|
// and NANDing out the result from the set) requires several descent
|
|
// of the BDD. Maybe it would be faster to compute all satisfying
|
|
// formula in one operation.
|
|
next_succ_set_ &= !current_;
|
|
current_ = bdd_satone(next_succ_set_);
|
|
}
|
|
|
|
bool
|
|
tgba_succ_iterator_concrete::done()
|
|
{
|
|
return next_succ_set_ == bddfalse;
|
|
}
|
|
|
|
state_bdd
|
|
tgba_succ_iterator_concrete::current_state()
|
|
{
|
|
assert(!done());
|
|
return bdd_exist(current_, data_.notnow_set);
|
|
}
|
|
|
|
bdd
|
|
tgba_succ_iterator_concrete::current_condition()
|
|
{
|
|
assert(!done());
|
|
return bdd_exist(current_, data_.notvar_set);
|
|
}
|
|
|
|
bdd
|
|
tgba_succ_iterator_concrete::current_promise()
|
|
{
|
|
assert(!done());
|
|
return bdd_exist(current_, data_.notprom_set);
|
|
}
|
|
|
|
}
|