00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
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_;
00184 unsigned removed_components;
00185 unsigned get_removed_components() const;
00186 unsigned get_vmsize() const;
00187 };
00188
00193 class couvreur99_check_shy : public couvreur99_check
00194 {
00195 public:
00196 couvreur99_check_shy(const tgba* a,
00197 option_map o = option_map(),
00198 const numbered_state_heap_factory* nshf
00199 = numbered_state_heap_hash_map_factory::instance());
00200 virtual ~couvreur99_check_shy();
00201
00202 virtual emptiness_check_result* check();
00203
00204 protected:
00205 struct successor {
00206 bdd acc;
00207 const spot::state* s;
00208 successor(bdd acc, const spot::state* s): acc(acc), s(s) {}
00209 };
00210
00211
00212
00213
00214
00215
00216 std::stack<bdd> arc;
00217
00218
00219 int num;
00220
00221
00222
00223 typedef std::list<successor> succ_queue;
00224
00225
00226 succ_queue::iterator pos;
00227
00228 struct todo_item
00229 {
00230 const state* s;
00231 int n;
00232 succ_queue q;
00233 todo_item(const state* s, int n, couvreur99_check_shy* shy);
00234 };
00235
00236 typedef std::list<todo_item> todo_list;
00237 todo_list todo;
00238
00239 void clear_todo();
00240
00242 bool group_;
00243
00244
00245 bool group2_;
00246
00247
00248
00249 bool onepass_;
00250
00259 virtual numbered_state_heap::state_index_p find_state(const state* s);
00260 };
00261
00262
00264 }
00265
00266 #endif // SPOT_TGBAALGOS_GTEC_GTEC_HH