* src/tgbaalgos/gv04.cc, src/tgbaalgos/ndfs_result.hxx,

src/tgbaalgos/gtec/ce.cc: Do not account for states that are
computed but not visited by the BFS&DFS used to construct
accepting runs.
This commit is contained in:
Alexandre Duret-Lutz 2005-01-26 17:31:21 +00:00
parent 68c0aa2e38
commit acead199f5
4 changed files with 16 additions and 9 deletions

View file

@ -1,3 +1,10 @@
2005-01-26 Alexandre Duret-Lutz <adl@src.lip6.fr>
* src/tgbaalgos/gv04.cc, src/tgbaalgos/ndfs_result.hxx,
src/tgbaalgos/gtec/ce.cc: Do not account for states that are
computed but not visited by the BFS&DFS used to construct
accepting runs.
2005-01-25 Denis Poitrenaud <Denis.Poitrenaud@lip6.fr> 2005-01-25 Denis Poitrenaud <Denis.Poitrenaud@lip6.fr>
* src/tgbatest/randtgba.cc: Complete performance measurements. * src/tgbatest/randtgba.cc: Complete performance measurements.

View file

@ -180,7 +180,6 @@ namespace spot
virtual const state* virtual const state*
filter(const state* s) filter(const state* s)
{ {
r->inc_ars_cycle_states();
numbered_state_heap::state_index_p sip = ecs->h->find(s); numbered_state_heap::state_index_p sip = ecs->h->find(s);
// Ignore unknown states. // Ignore unknown states.
if (!sip.first) if (!sip.first)
@ -191,6 +190,7 @@ namespace spot
// Stay in the final SCC. // Stay in the final SCC.
if (*sip.second < scc_root) if (*sip.second < scc_root)
return 0; return 0;
r->inc_ars_cycle_states();
return sip.first; return sip.first;
} }

View file

@ -339,7 +339,6 @@ namespace spot
virtual const state* virtual const state*
filter(const state* s) filter(const state* s)
{ {
r->inc_ars_cycle_states();
// Do not escape the SCC // Do not escape the SCC
hash_type::const_iterator j = data.h.find(s); hash_type::const_iterator j = data.h.find(s);
if (// This state was never visited so far. if (// This state was never visited so far.
@ -354,6 +353,7 @@ namespace spot
delete s; delete s;
return 0; return 0;
} }
r->inc_ars_cycle_states();
delete s; delete s;
return j->first; return j->first;
} }

View file

@ -272,7 +272,6 @@ namespace spot
if (!f.it->done()) if (!f.it->done())
{ {
const state *s_prime = f.it->current_state(); const state *s_prime = f.it->current_state();
inc_ars_cycle_states();
ndfsr_trace << " Visit the successor: " ndfsr_trace << " Visit the successor: "
<< a_->format_state(s_prime) << std::endl; << a_->format_state(s_prime) << std::endl;
bdd label = f.it->current_condition(); bdd label = f.it->current_condition();
@ -287,6 +286,7 @@ namespace spot
} }
else if (seen.find(s_prime) == seen.end()) else if (seen.find(s_prime) == seen.end())
{ {
inc_ars_cycle_states();
ndfsr_trace << " it is not seen, go down" << std::endl; ndfsr_trace << " it is not seen, go down" << std::endl;
seen.insert(s_prime); seen.insert(s_prime);
tgba_succ_iterator* i = a_->succ_iter(s_prime); tgba_succ_iterator* i = a_->succ_iter(s_prime);
@ -295,6 +295,7 @@ namespace spot
} }
else if ((acc & covered_acc) != acc) else if ((acc & covered_acc) != acc)
{ {
inc_ars_cycle_states();
ndfsr_trace << " a propagation is needed, " ndfsr_trace << " a propagation is needed, "
<< "start a search" << std::endl; << "start a search" << std::endl;
if (search(s_prime, target, dead)) if (search(s_prime, target, dead))
@ -398,7 +399,6 @@ namespace spot
const state* filter(const state* s) const state* filter(const state* s)
{ {
ars->inc_ars_cycle_states();
if (!h.has_been_visited(s) if (!h.has_been_visited(s)
|| seen.find(s) != seen.end() || seen.find(s) != seen.end()
|| dead.find(s) != dead.end()) || dead.find(s) != dead.end())
@ -406,6 +406,7 @@ namespace spot
delete s; delete s;
return 0; return 0;
} }
ars->inc_ars_cycle_states();
seen.insert(s); seen.insert(s);
return s; return s;
} }
@ -491,11 +492,6 @@ namespace spot
const state* filter(const state* s) const state* filter(const state* s)
{ {
if (cycle)
ars->inc_ars_cycle_states();
else
ars->inc_ars_prefix_states();
ndfsr_trace << "filter: " << a_->format_state(s); ndfsr_trace << "filter: " << a_->format_state(s);
if (!h.has_been_visited(s) || seen.find(s) != seen.end()) if (!h.has_been_visited(s) || seen.find(s) != seen.end())
{ {
@ -507,6 +503,10 @@ namespace spot
return 0; return 0;
} }
ndfsr_trace << " OK" << std::endl; ndfsr_trace << " OK" << std::endl;
if (cycle)
ars->inc_ars_cycle_states();
else
ars->inc_ars_prefix_states();
seen.insert(s); seen.insert(s);
return s; return s;
} }