scc_info: introduce edges_of() and inner_edges_of()
This is motivated by some upcoming patch by Heňo. * spot/twaalgos/sccinfo.hh (edges_of, inner_edges_of): New methods. * spot/twaalgos/sccinfo.cc, spot/twaalgos/strength.cc: Use them. * spot/twa/twagraph.hh (edge_number): Add an overload. * python/spot/impl.i: Bind the new methods. * tests/python/sccinfo.py: Add tests. * NEWS: Mention the changes.
This commit is contained in:
parent
e089509a0c
commit
8e19d3f47e
7 changed files with 265 additions and 30 deletions
|
|
@ -51,25 +51,24 @@ namespace spot
|
|||
bool first = true;
|
||||
acc_cond::mark_t m = 0U;
|
||||
if (is_weak)
|
||||
for (auto src: si->states_of(i))
|
||||
for (auto& t: aut->out(src))
|
||||
// In case of a universal edge we only need to check
|
||||
// the first destination of an inside the SCC, because
|
||||
// the other have the same t.acc.
|
||||
if (si->scc_of(*aut->univ_dests(t.dst).begin()) == i)
|
||||
{
|
||||
if (first)
|
||||
{
|
||||
first = false;
|
||||
m = t.acc;
|
||||
}
|
||||
else if (m != t.acc)
|
||||
{
|
||||
is_weak = false;
|
||||
if (!inweak)
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
for (auto& t: si->edges_of(i))
|
||||
// In case of a universal edge we only need to check if
|
||||
// the first destination of an edge is inside the SCC,
|
||||
// because the others have the same t.acc.
|
||||
if (si->scc_of(*aut->univ_dests(t.dst).begin()) == i)
|
||||
{
|
||||
if (first)
|
||||
{
|
||||
first = false;
|
||||
m = t.acc;
|
||||
}
|
||||
else if (m != t.acc)
|
||||
{
|
||||
is_weak = false;
|
||||
if (!inweak)
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
if (!is_weak && si->is_accepting_scc(i))
|
||||
{
|
||||
assert(inweak);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue