diff --git a/ChangeLog b/ChangeLog index 80f8076e1..57bbec670 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2007-07-23 Alexandre Duret-Lutz + * iface/gspn/ltlgspn.cc: New option -L. + * iface/gspn/ssp.cc, iface/gspn/ssp.hh (gspn_ssp_interface) + support for a new option "pushfront". + * NEWS, configure.in: Bump version to 0.4a. 2007-07-17 Alexandre Duret-Lutz diff --git a/iface/gspn/ltlgspn.cc b/iface/gspn/ltlgspn.cc index fe4a6b410..fbcb0350e 100644 --- a/iface/gspn/ltlgspn.cc +++ b/iface/gspn/ltlgspn.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2003, 2004, 2006 Laboratoire d'Informatique de Paris 6 +// Copyright (C) 2003, 2004, 2006, 2007 Laboratoire d'Informatique de Paris 6 // (LIP6), département Systèmes Répartis Coopératifs (SRC), // Université Pierre et Marie Curie. // @@ -53,6 +53,8 @@ syntax(char* prog) #ifdef SSP << " -1 do not use a double hash (for inclusion check)" << std::endl + << " -L use LIFO ordering for inclusion check" + << std::endl #endif << " -c compute an example" << std::endl << " (instead of just checking for emptiness)" << std::endl @@ -108,6 +110,7 @@ main(int argc, char **argv) #ifdef SSP bool doublehash = true; bool stack_inclusion = true; + bool pushfront = false; #endif std::string dead = "true"; @@ -120,6 +123,10 @@ main(int argc, char **argv) { doublehash = false; } + else if (!strcmp(argv[formula_index], "-L")) + { + pushfront = true; + } else #endif if (!strcmp(argv[formula_index], "-c")) @@ -209,7 +216,8 @@ main(int argc, char **argv) #if SSP bool inclusion = (check != Couvreur && check != Couvreur2); - spot::gspn_ssp_interface gspn(2, argv, dict, env, inclusion, doublehash); + spot::gspn_ssp_interface gspn(2, argv, dict, env, inclusion, + doublehash, pushfront); spot::tgba_parse_error_list pel1; spot::tgba_explicit* control = spot::tgba_parse(argv[formula_index + 2], diff --git a/iface/gspn/ssp.cc b/iface/gspn/ssp.cc index 91a18b939..6d720229b 100644 --- a/iface/gspn/ssp.cc +++ b/iface/gspn/ssp.cc @@ -49,6 +49,7 @@ namespace spot } static bool doublehash; + static bool pushfront; } // state_gspn_ssp @@ -539,10 +540,12 @@ namespace spot const ltl::declarative_environment& env, bool inclusion, - bool doublehash_) + bool doublehash_, + bool pushfront_) : dict_(dict), env_(env) { doublehash = doublehash_; + pushfront = pushfront_; if (inclusion) inclusion_version(); @@ -863,7 +866,10 @@ namespace spot if (sg) { const void* cont = container_(sg); - contained[cont][s_->right()].push_front(s); + if (pushfront) + contained[cont][s_->right()].push_front(s); + else + contained[cont][s_->right()].push_back(s); } } diff --git a/iface/gspn/ssp.hh b/iface/gspn/ssp.hh index f9f12fa09..dbb7df02f 100644 --- a/iface/gspn/ssp.hh +++ b/iface/gspn/ssp.hh @@ -1,4 +1,4 @@ -// Copyright (C) 2003, 2004, 2006 Laboratoire d'Informatique de +// Copyright (C) 2003, 2004, 2006, 2007 Laboratoire d'Informatique de // Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC), // Université Pierre et Marie Curie. // @@ -41,7 +41,8 @@ namespace spot gspn_ssp_interface(int argc, char **argv, bdd_dict* dict, const ltl::declarative_environment& env, bool inclusion = false, - bool doublehash = true); + bool doublehash = true, + bool pushfront = false); ~gspn_ssp_interface(); tgba* automaton(const tgba* operand) const; private: