tgba_digraph: force selection of properties kept on copy

* src/tgba/tgba.hh: Declare a prop_set to specify the types.
* src/tgba/tgbagraph.hh: Use prop_set for all copy constructors.
* iface/ltsmin/ltsmin.cc, src/bin/autfilt.cc, src/bin/randaut.cc,
src/tgbaalgos/are_isomorphic.cc, src/tgbaalgos/closure.cc,
src/tgbaalgos/complete.cc, src/tgbaalgos/degen.cc,
src/tgbaalgos/dotty.cc, src/tgbaalgos/dtgbacomp.cc,
src/tgbaalgos/dupexp.cc, src/tgbaalgos/dupexp.hh,
src/tgbaalgos/sccfilter.cc, src/tgbaalgos/simulation.cc,
src/tgbaalgos/stutterize.cc, src/tgbatest/checkpsl.cc,
src/tgbatest/emptchk.cc, src/tgbatest/ltl2tgba.cc,
wrap/python/spot.i,src/graphtest/tgbagraph.test: Adjust all uses.
This commit is contained in:
Alexandre Duret-Lutz 2014-12-23 19:35:08 +01:00
parent 77cb836e47
commit 87c2b291ed
21 changed files with 309 additions and 162 deletions

View file

@ -36,12 +36,12 @@ namespace spot
class dupexp_iter: public T
{
public:
dupexp_iter(const const_tgba_ptr& a)
dupexp_iter(const const_tgba_ptr& a, tgba::prop_set p)
: T(a), out_(make_tgba_digraph(a->get_dict()))
{
out_->copy_acceptance_conditions_of(a);
out_->copy_ap_of(a);
out_->prop_copy(a, true, true, true, true);
out_->prop_copy(a, p);
}
tgba_digraph_ptr
@ -77,8 +77,9 @@ namespace spot
{
public:
dupexp_iter_save(const const_tgba_ptr& a,
tgba::prop_set p,
std::vector<const state*>& relation)
: dupexp_iter<T>(a), relation_(relation)
: dupexp_iter<T>(a, p), relation_(relation)
{
}
@ -96,37 +97,39 @@ namespace spot
} // anonymous
tgba_digraph_ptr
tgba_dupexp_bfs(const const_tgba_ptr& aut)
tgba_dupexp_bfs(const const_tgba_ptr& aut, tgba::prop_set p)
{
dupexp_iter<tgba_reachable_iterator_breadth_first> di(aut);
dupexp_iter<tgba_reachable_iterator_breadth_first> di(aut, p);
di.run();
return di.result();
}
tgba_digraph_ptr
tgba_dupexp_dfs(const const_tgba_ptr& aut)
tgba_dupexp_dfs(const const_tgba_ptr& aut, tgba::prop_set p)
{
dupexp_iter<tgba_reachable_iterator_depth_first> di(aut);
dupexp_iter<tgba_reachable_iterator_depth_first> di(aut, p);
di.run();
return di.result();
}
tgba_digraph_ptr
tgba_dupexp_bfs(const const_tgba_ptr& aut, std::vector<const state*>& rel)
tgba_dupexp_bfs(const const_tgba_ptr& aut, tgba::prop_set p,
std::vector<const state*>& rel)
{
dupexp_iter_save<tgba_reachable_iterator_breadth_first> di(aut, rel);
dupexp_iter_save<tgba_reachable_iterator_breadth_first> di(aut, p, rel);
di.run();
return di.result();
}
tgba_digraph_ptr
tgba_dupexp_dfs(const const_tgba_ptr& aut, std::vector<const state*>& rel)
tgba_dupexp_dfs(const const_tgba_ptr& aut, tgba::prop_set p,
std::vector<const state*>& rel)
{
auto aa = std::dynamic_pointer_cast<const spot::tgba_digraph>(aut);
auto aa = std::dynamic_pointer_cast<const tgba_digraph>(aut);
if (aa)
{
aa->get_init_state_number(); // Create an initial state if needed.
auto res = make_tgba_digraph(aa);
auto res = make_tgba_digraph(aa, p);
unsigned ns = aa->num_states();
rel.reserve(ns);
// The state numbers are common to both automata, but
@ -136,7 +139,7 @@ namespace spot
return res;
}
dupexp_iter_save<tgba_reachable_iterator_depth_first> di(aut, rel);
dupexp_iter_save<tgba_reachable_iterator_depth_first> di(aut, p, rel);
di.run();
return di.result();
}