Fix computation of product acceptance conditions, when the

two operands share some acceptance conditions.
* src/tgba/tgbaproduct.hh (tgba_product::left_acc_complement_,
tgba_product::right_acc_complement_): New attribute.
* src/tgba/tgbaproduct.cc (tgba_product::tgba_product): Set them.
(tgba_product::succ_iter): Use them.
* src/tgba/explpro2.test: New file.
* src/tgba/Makefile.am (TESTS): Add it.
This commit is contained in:
Alexandre Duret-Lutz 2003-08-22 10:07:02 +00:00
parent 8a44ed08ae
commit 7db71d9afe
5 changed files with 61 additions and 8 deletions

View file

@ -148,12 +148,17 @@ namespace spot
{
assert(dict_ == right->get_dict());
bdd lna = left_->neg_accepting_conditions();
bdd rna = right_->neg_accepting_conditions();
left_acc_complement_ = bdd_exist(lna, bdd_support(rna));
right_acc_complement_ = bdd_exist(rna, bdd_support(lna));
all_accepting_conditions_ = ((left_->all_accepting_conditions()
& right_->neg_accepting_conditions())
& left_acc_complement_)
| (right_->all_accepting_conditions()
& left_->neg_accepting_conditions()));
neg_accepting_conditions_ = (left_->neg_accepting_conditions()
& right_->neg_accepting_conditions());
& right_acc_complement_));
neg_accepting_conditions_ = lna & rna;
dict_->register_all_variables_of(&left_, this);
dict_->register_all_variables_of(&right_, this);
}
@ -192,8 +197,8 @@ namespace spot
tgba_succ_iterator* ri = right_->succ_iter(s->right(),
global_state, global_automaton);
return new tgba_succ_iterator_product(li, ri,
left_->neg_accepting_conditions(),
right_->neg_accepting_conditions());
left_acc_complement_,
right_acc_complement_);
}
bdd

View file

@ -122,6 +122,8 @@ namespace spot
bdd_dict* dict_;
const tgba* left_;
const tgba* right_;
bdd left_acc_complement_;
bdd right_acc_complement_;
bdd all_accepting_conditions_;
bdd neg_accepting_conditions_;
// Disallow copy.