* src/tgbaalgos/gtec/status.hh

(couvreur99_check_status::cycle_seed): New attribute.
* src/tgbaalgos/gtec/gtec.cc (couvreur99_check::check,
couvreur99_check_shy::check): Fill cycle_seed.
* src/tgbaalgos/gtec/ce.hh, src/tgbaalgos/gtec/ce.cc:
(couvreur99_check_result::accepting_run,
couvreur99_check_result::accepting_cycle): Revamp to compute a
cycle from the cycle_start, and then the shortest prefix to this
cycle.
This commit is contained in:
Alexandre Duret-Lutz 2004-12-10 18:33:39 +00:00
parent 27966c28f0
commit abbd0eee07
8 changed files with 154 additions and 139 deletions

View file

@ -229,6 +229,9 @@ namespace spot
todo.pop();
dec_depth();
}
// Use this state to start the computation of an accepting
// cycle.
ecs_->cycle_seed = spi.first;
set_states(ecs_->states());
return new couvreur99_check_result(ecs_);
}
@ -288,7 +291,8 @@ namespace spot
succ_queue::iterator q = queue.begin();
while (q != queue.end())
{
int* i = find_state(q->s);
numbered_state_heap::state_index_p sip = ecs_->h->find(q->s);
int* i = sip.second;
if (!i)
{
// Skip unknown states.
@ -333,10 +337,15 @@ namespace spot
// merged SCC.
ecs_->root.top().condition |= acc;
// Have we found all acceptance conditions?
if (ecs_->root.top().condition
== ecs_->aut->all_acceptance_conditions())
{
/// q->s has already been freed by find_state().
// Use this state to start the computation of an accepting
// cycle.
ecs_->cycle_seed = sip.first;
/// q->s has already been freed by ecs_->h->find.
queue.erase(q);
// We have found an accepting SCC. Clean up TODO.
// We must delete all states of apparing in TODO