diff --git a/src/twa/twagraph.cc b/src/twa/twagraph.cc index 0f29d3393..10eb6a409 100644 --- a/src/twa/twagraph.cc +++ b/src/twa/twagraph.cc @@ -19,9 +19,39 @@ #include "twagraph.hh" #include "ltlast/constant.hh" +#include "ltlvisit/tostring.hh" namespace spot { + void + twa_graph::release_formula_namer(typename namer::type* + namer, bool keep_names) + { + if (keep_names) + { + auto v = new std::vector(num_states()); + auto& n = namer->names(); + unsigned ns = n.size(); + assert(n.size() <= v->size()); + for (unsigned i = 0; i < ns; ++i) + { + auto f = n[i]; + if (f) + { + (*v)[i] = to_string(f); + f->destroy(); + } + } + set_named_prop("state-names", v); + } + else + { + for (auto n: namer->names()) + if (n) + n->destroy(); + } + delete namer; + } void twa_graph::merge_transitions() { diff --git a/src/twa/twagraph.hh b/src/twa/twagraph.hh index 51b32f252..6d49b39a0 100644 --- a/src/twa/twagraph.hh +++ b/src/twa/twagraph.hh @@ -25,6 +25,7 @@ #include "twa/bdddict.hh" #include "twa/twa.hh" #include "twaalgos/dupexp.hh" +#include "ltlast/formula.hh" #include namespace spot @@ -222,6 +223,16 @@ namespace spot return new named_graph(g_); } + typename namer::type* + create_formula_namer() + { + return create_namer(); + } + + void + release_formula_namer(typename namer::type* namer, + bool keep_names); + graph_t& get_graph() { return g_; diff --git a/src/twaalgos/ltl2tgba_fm.cc b/src/twaalgos/ltl2tgba_fm.cc index add30de53..2d07cfd2c 100644 --- a/src/twaalgos/ltl2tgba_fm.cc +++ b/src/twaalgos/ltl2tgba_fm.cc @@ -2537,9 +2537,8 @@ namespace spot } } - for (auto n: namer->names()) - n->destroy(); - delete namer; + // Set the following to true to preserve state names. + a->release_formula_namer(namer, false); dict->register_propositions(fc.used_vars(), a);