diff --git a/ChangeLog b/ChangeLog index 7a709f625..55fda08ff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-08-07 Alexandre Duret-Lutz + + * iface/gspn/ltlgspn.cc: New option: -e54. + * iface/gspn/ssp.hh, iface/gspn/ssp.cc: Add the + reversed_double_inclusion boolean for this. + 2008-06-12 Damien Lefortier Add ELTL visitors in eltlvisit/ and start the ELTL translation (LACIM). diff --git a/iface/gspn/ltlgspn.cc b/iface/gspn/ltlgspn.cc index 646bfcf62..f8ff4cd1c 100644 --- a/iface/gspn/ltlgspn.cc +++ b/iface/gspn/ltlgspn.cc @@ -73,7 +73,9 @@ syntax(char* prog) << " -e4 use semi-d. incl. Couvreur's emptiness-check's " << "shy variant" << std::endl - << " -e45 mix of -e4 and -e5 " << std::endl + << " -e45 mix of -e4 and -e5 (semi.d. incl. before d.incl.)" + << std::endl + << " -e54 mix of -e5 and -e4 (the other way around)" << std::endl << " -e5 use d. incl. Couvreur's emptiness-check's shy variant" << std::endl << " -e6 like -e5, but without inclusion checks in the " @@ -116,6 +118,7 @@ main(int argc, char **argv) bool stack_inclusion = true; bool pushfront = false; bool double_inclusion = false; + bool reversed_double_inclusion = false; bool no_decomp = false; #endif std::string dead = "true"; @@ -172,6 +175,12 @@ main(int argc, char **argv) check = Couvreur5; double_inclusion = true; } + else if (!strcmp(argv[formula_index], "-e54")) + { + check = Couvreur5; + double_inclusion = true; + reversed_double_inclusion = true; + } else if (!strcmp(argv[formula_index], "-e5")) { check = Couvreur5; @@ -295,6 +304,7 @@ main(int argc, char **argv) case Couvreur5: ec = spot::couvreur99_check_ssp_shy(prod, stack_inclusion, double_inclusion, + reversed_double_inclusion, no_decomp); break; #endif diff --git a/iface/gspn/ssp.cc b/iface/gspn/ssp.cc index 850c9b941..bed28110d 100644 --- a/iface/gspn/ssp.cc +++ b/iface/gspn/ssp.cc @@ -994,7 +994,9 @@ namespace spot { public: couvreur99_check_shy_ssp(const tgba* a, bool stack_inclusion, - bool double_inclusion, bool no_decomp) + bool double_inclusion, + bool reversed_double_inclusion, + bool no_decomp) : couvreur99_check_shy(a, option_map(), numbered_state_heap_ssp_factory_semi::instance()), @@ -1002,6 +1004,7 @@ namespace spot inclusion_count_stack(0), stack_inclusion(stack_inclusion), double_inclusion(double_inclusion), + reversed_double_inclusion(reversed_double_inclusion), no_decomp(no_decomp) { onepass_ = true; @@ -1022,6 +1025,7 @@ namespace spot unsigned inclusion_count_stack; bool stack_inclusion; bool double_inclusion; + bool reversed_double_inclusion; bool no_decomp; protected: @@ -1110,6 +1114,7 @@ namespace spot { if (stack_inclusion && double_inclusion + && !reversed_double_inclusion && spot_inclusion(new_state->left(), old_state->left())) break; @@ -1181,6 +1186,12 @@ namespace spot break; } + if (stack_inclusion + && double_inclusion + && reversed_double_inclusion + && spot_inclusion(new_state->left(), + old_state->left())) + break; } } } @@ -1296,11 +1307,15 @@ namespace spot couvreur99_check* couvreur99_check_ssp_shy(const tgba* ssp_automata, bool stack_inclusion, - bool double_inclusion, bool no_decomp) + bool double_inclusion, + bool reversed_double_inclusion, + bool no_decomp) { assert(dynamic_cast(ssp_automata)); return new couvreur99_check_shy_ssp(ssp_automata, stack_inclusion, - double_inclusion, no_decomp); + double_inclusion, + reversed_double_inclusion, + no_decomp); } #if 0 diff --git a/iface/gspn/ssp.hh b/iface/gspn/ssp.hh index cbc06ede4..c0e5a5914 100644 --- a/iface/gspn/ssp.hh +++ b/iface/gspn/ssp.hh @@ -1,4 +1,4 @@ -// Copyright (C) 2003, 2004, 2006, 2007 Laboratoire d'Informatique de +// Copyright (C) 2003, 2004, 2006, 2007, 2008 Laboratoire d'Informatique de // Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC), // Université Pierre et Marie Curie. // @@ -58,6 +58,8 @@ namespace spot couvreur99_check* couvreur99_check_ssp_shy(const tgba* ssp_automata, bool stack_inclusion = true, bool double_inclusion = false, + bool reversed_double_inclusion + = false, bool no_decomp = false); /// @}