mark_t: sets() no longer returns a vector

spot::mark_t::sets() was modified so that it now returns an iterable
object rather than an std::vector<unsigned>.

* NEWS: Mention the modification.
* python/spot/impl.i: Declares mark_container as iterable to SWIG.
* spot/parseaut/parseaut.yy: Adapts to the modification.
* spot/twa/acc.hh: Implement the modification.
* tests/python/acc_cond.ipynb: Adapts to the modification.
This commit is contained in:
Thomas Medioni 2017-04-19 18:05:30 +02:00
parent 9377db2e5e
commit cc3bdfcd2e
5 changed files with 113 additions and 21 deletions

View file

@ -2173,14 +2173,18 @@ static void fix_acceptance(result_& r)
unsigned base = 0;
if (both)
{
auto v = both.sets();
auto vs = v.size();
base = acc.add_sets(vs);
base = acc.add_sets(both.count());
for (auto& t: r.h->aut->edge_vector())
if ((t.acc & both) != both)
for (unsigned i = 0; i < vs; ++i)
if (!t.acc.has(v[i]))
t.acc |= acc.mark(base + i);
{
unsigned i = 0;
if ((t.acc & both) != both)
for (unsigned v : both.sets())
{
if (!t.acc.has(v))
t.acc |= acc.mark(base + i);
i++;
}
}
}
if (onlyneg || both)