reachability: improve support for callbacks
* spot/mc/reachability.hh: here.
This commit is contained in:
parent
72948661e9
commit
9208726d97
1 changed files with 19 additions and 13 deletions
|
|
@ -55,16 +55,21 @@ namespace spot
|
||||||
{
|
{
|
||||||
self().setup();
|
self().setup();
|
||||||
State initial = sys_.initial(tid_);
|
State initial = sys_.initial(tid_);
|
||||||
|
if (SPOT_LIKELY(self().push(initial, dfs_number)))
|
||||||
|
{
|
||||||
todo.push_back({initial, sys_.succ(initial, tid_)});
|
todo.push_back({initial, sys_.succ(initial, tid_)});
|
||||||
visited[initial] = ++dfs_number;
|
visited[initial] = ++dfs_number;
|
||||||
self().push(initial, dfs_number);
|
}
|
||||||
while (!todo.empty())
|
while (!todo.empty())
|
||||||
{
|
{
|
||||||
if (todo.back().it->done())
|
if (todo.back().it->done())
|
||||||
|
{
|
||||||
|
if (SPOT_LIKELY(self().pop(todo.back().s)))
|
||||||
{
|
{
|
||||||
sys_.recycle(todo.back().it, tid_);
|
sys_.recycle(todo.back().it, tid_);
|
||||||
todo.pop_back();
|
todo.pop_back();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
++transitions;
|
++transitions;
|
||||||
|
|
@ -73,11 +78,12 @@ namespace spot
|
||||||
if (it.second)
|
if (it.second)
|
||||||
{
|
{
|
||||||
++dfs_number;
|
++dfs_number;
|
||||||
self().push(dst, dfs_number);
|
if (SPOT_LIKELY(self().push(dst, dfs_number)))
|
||||||
self().edge(visited[todo.back().s], dfs_number);
|
{
|
||||||
todo.back().it->next();
|
todo.back().it->next();
|
||||||
todo.push_back({dst, sys_.succ(dst, tid_)});
|
todo.push_back({dst, sys_.succ(dst, tid_)});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self().edge(visited[todo.back().s], visited[dst]);
|
self().edge(visited[todo.back().s], visited[dst]);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue