Introduce tgba::release_iter().
Instead of "delete iter;" we now do "aut->release_iter(iter);" to give the iterator back to the automaton. The TGBA classes now reuse a previously returned tgba_succ_iterator to answer a succ_iter() call, therefore avoiding (1) memory allocation, as well as (2) vtable and other constant member initialization. * src/tgba/tgba.hh, src/tgba/tgba.cc (release_iter, iter_cache_): Implement a release_iter() that stores the released iterator in iter_cache_. * src/tgba/succiter.hh (internal::succ_iterable): Move... * src/tgba/tgba.hh (tgba::succ_iterable): ... here. And use release_iter(). * iface/dve2/dve2.cc, src/kripke/kripke.cc, src/kripke/kripke.hh, src/tgba/succiterconcrete.cc, src/tgba/succiterconcrete.hh, src/tgba/taatgba.hh, src/tgba/tgbabddconcrete.cc, src/tgba/tgbaexplicit.hh, src/tgba/tgbamask.cc, src/tgba/tgbaproduct.cc, src/tgba/tgbaproxy.cc, src/tgba/tgbascc.cc, src/tgba/tgbatba.cc, src/tgba/tgbaunion.cc, src/tgba/tgbaunion.hh, src/tgba/wdbacomp.cc, src/tgbaalgos/bfssteps.cc, src/tgbaalgos/compsusp.cc, src/tgbaalgos/cycles.cc, src/tgbaalgos/dtbasat.cc, src/tgbaalgos/dtgbasat.cc, src/tgbaalgos/gtec/gtec.cc, src/tgbaalgos/gv04.cc, src/tgbaalgos/isweakscc.cc, src/tgbaalgos/lbtt.cc, src/tgbaalgos/ltl2tgba_fm.cc, src/tgbaalgos/magic.cc, src/tgbaalgos/ndfs_result.hxx, src/tgbaalgos/neverclaim.cc, src/tgbaalgos/reachiter.cc, src/tgbaalgos/replayrun.cc, src/tgbaalgos/safety.cc, src/tgbaalgos/scc.cc, src/tgbaalgos/se05.cc, src/tgbaalgos/simulation.cc, src/tgbaalgos/tau03.cc, src/tgbaalgos/tau03opt.cc: Use release_iter() instead of deleting iterators, and used recycle iter_cache_ in implementations of tgba::succ_iter().
This commit is contained in:
parent
487cd01d9f
commit
06c69f88ff
40 changed files with 386 additions and 248 deletions
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (C) 2012, 2013 Laboratoire de Recherche et Developpement
|
||||
// de l'Epita (LRDE).
|
||||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2012, 2013, 2014 Laboratoire de Recherche et
|
||||
// Developpement de l'Epita (LRDE).
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
//
|
||||
|
|
@ -96,12 +97,10 @@ namespace spot
|
|||
if (!aut)
|
||||
return false;
|
||||
|
||||
const std::list<const spot::state*> states = map.states_of(scc);
|
||||
std::list<const spot::state*>::const_iterator it;
|
||||
for (it = states.begin(); it != states.end(); ++it)
|
||||
for (auto ss: map.states_of(scc))
|
||||
{
|
||||
const state_explicit_formula* s =
|
||||
down_cast<const state_explicit_formula*>(*it);
|
||||
down_cast<const state_explicit_formula*>(ss);
|
||||
assert(s);
|
||||
if (aut->get_label(s)->is_syntactic_persistence())
|
||||
return true;
|
||||
|
|
@ -117,12 +116,10 @@ namespace spot
|
|||
if (!aut)
|
||||
return false;
|
||||
|
||||
const std::list<const spot::state*> states = map.states_of(scc);
|
||||
std::list<const spot::state*>::const_iterator it;
|
||||
for (it = states.begin(); it != states.end(); ++it)
|
||||
for (auto ss: map.states_of(scc))
|
||||
{
|
||||
const state_explicit_formula* s =
|
||||
down_cast<const state_explicit_formula*>(*it);
|
||||
down_cast<const state_explicit_formula*>(ss);
|
||||
assert(s);
|
||||
if (aut->get_label(s)->is_syntactic_guarantee())
|
||||
return true;
|
||||
|
|
@ -134,18 +131,15 @@ namespace spot
|
|||
is_complete_scc(scc_map& map, unsigned scc)
|
||||
{
|
||||
const spot::tgba *a = map.get_aut();
|
||||
const std::list<const spot::state*> states = map.states_of(scc);
|
||||
std::list<const spot::state*>::const_iterator it;
|
||||
for (it = states.begin(); it != states.end(); ++it)
|
||||
for (auto s: map.states_of(scc))
|
||||
{
|
||||
const state *s = *it;
|
||||
tgba_succ_iterator* it = a->succ_iter(s);
|
||||
it->first();
|
||||
|
||||
// If a state has no successors, the SCC is not complete.
|
||||
if (it->done())
|
||||
{
|
||||
delete it;
|
||||
a->release_iter(it);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -163,7 +157,7 @@ namespace spot
|
|||
it->next();
|
||||
}
|
||||
while (!it->done());
|
||||
delete it;
|
||||
a->release_iter(it);
|
||||
|
||||
if (sumall != bddtrue)
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue