Main Page | Modules | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

gtec.hh

Go to the documentation of this file.
00001 // Copyright (C) 2003, 2004, 2005  Laboratoire d'Informatique de Paris 6 (LIP6),
00002 // département Systèmes Répartis Coopératifs (SRC), Université Pierre
00003 // et Marie Curie.
00004 //
00005 // This file is part of Spot, a model checking library.
00006 //
00007 // Spot is free software; you can redistribute it and/or modify it
00008 // under the terms of the GNU General Public License as published by
00009 // the Free Software Foundation; either version 2 of the License, or
00010 // (at your option) any later version.
00011 //
00012 // Spot is distributed in the hope that it will be useful, but WITHOUT
00013 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
00014 // or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
00015 // License for more details.
00016 //
00017 // You should have received a copy of the GNU General Public License
00018 // along with Spot; see the file COPYING.  If not, write to the Free
00019 // Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
00020 // 02111-1307, USA.
00021 
00022 #ifndef SPOT_TGBAALGOS_GTEC_GTEC_HH
00023 # define SPOT_TGBAALGOS_GTEC_GTEC_HH
00024 
00025 #include <stack>
00026 #include "status.hh"
00027 #include "tgbaalgos/emptiness.hh"
00028 #include "tgbaalgos/emptiness_stats.hh"
00029 
00030 namespace spot
00031 {
00034 
00138   emptiness_check*
00139   couvreur99(const tgba* a,
00140              option_map options = option_map(),
00141              const numbered_state_heap_factory* nshf
00142              = numbered_state_heap_hash_map_factory::instance());
00143 
00144 
00148   class couvreur99_check: public emptiness_check, public ec_statistics
00149   {
00150   public:
00151     couvreur99_check(const tgba* a,
00152                      option_map o = option_map(),
00153                      const numbered_state_heap_factory* nshf
00154                      = numbered_state_heap_hash_map_factory::instance());
00155     virtual ~couvreur99_check();
00156 
00158     virtual emptiness_check_result* check();
00159 
00160     virtual std::ostream& print_stats(std::ostream& os) const;
00161 
00170     const couvreur99_check_status* result() const;
00171 
00172   protected:
00173     couvreur99_check_status* ecs_;
00179     void remove_component(const state* start_delete);
00180 
00182     bool poprem_;
00183   };
00184 
00189   class couvreur99_check_shy : public couvreur99_check
00190   {
00191   public:
00192     couvreur99_check_shy(const tgba* a,
00193                          option_map o = option_map(),
00194                          const numbered_state_heap_factory* nshf
00195                          = numbered_state_heap_hash_map_factory::instance());
00196     virtual ~couvreur99_check_shy();
00197 
00198     virtual emptiness_check_result* check();
00199 
00200   protected:
00201     struct successor {
00202       bdd acc;
00203       const spot::state* s;
00204       successor(bdd acc, const spot::state* s): acc(acc), s(s) {}
00205     };
00206 
00207     // We use five main data in this algorithm:
00208     // * couvreur99_check::root, a stack of strongly connected components (SCC),
00209     // * couvreur99_check::h, a hash of all visited nodes, with their order,
00210     //   (it is called "Hash" in Couvreur's paper)
00211     // * arc, a stack of acceptance conditions between each of these SCC,
00212     std::stack<bdd> arc;
00213     // * num, the number of visited nodes.  Used to set the order of each
00214     //   visited node,
00215     int num;
00216     // * todo, the depth-first search stack.  This holds pairs of the
00217     //   form (STATE, SUCCESSORS) where SUCCESSORS is a list of
00218     //   (ACCEPTANCE_CONDITIONS, STATE) pairs.
00219     typedef std::list<successor> succ_queue;
00220 
00221     struct todo_item
00222     {
00223       const state* s;
00224       int n;
00225       succ_queue q;
00226       todo_item(const state* s, int n)
00227         : s(s), n(n)
00228       {
00229       }
00230     };
00231 
00232     typedef std::list<todo_item> todo_list;
00233     todo_list todo;
00234 
00235     void clear_todo();
00236 
00237     // Whether successors should be grouped for states in the same
00238     // SCC.
00239     bool group_;
00240 
00249     virtual int* find_state(const state* s);
00250   };
00251 
00252 
00254 }
00255 
00256 #endif // SPOT_TGBAALGOS_GTEC_GTEC_HH

Please comment this page and report errors about it on the RefDocComments page.
Generated on Fri Apr 8 21:13:31 2005 for spot by doxygen 1.4.0