23 #ifndef SPOT_TGBA_TGBAEXPLICIT_HH
24 # define SPOT_TGBA_TGBAEXPLICIT_HH
60 template<
typename Label,
typename label_hash>
121 reinterpret_cast<const char*
>(
this) - static_cast<const char*>(0);
193 template<
typename State>
224 return const_cast<State*
>(res);
230 return it_->condition;
236 return it_->acceptance_conditions;
239 typename State::transitions_t::const_iterator
247 typename State::transitions_t::const_iterator
it_;
253 template<
typename State,
typename Type>
263 typedef Sgi::hash_map<label_t, State, label_hash_t>
ls_map;
264 typedef Sgi::hash_map<label_t, State*, label_hash_t>
alias_map;
265 typedef Sgi::hash_map<const State*, label_t, ptr_hash<State> >
sl_map;
296 t.condition = bddtrue;
297 t.acceptance_conditions = bddfalse;
299 typename transitions_t::iterator i =
300 source->successors.insert(source->successors.end(), t);
351 return ls_.find(name) !=
ls_.end();
360 typename ls_map::const_iterator i =
ls_.find(name);
368 typename sl_map::const_iterator i =
sl_.find(s);
369 assert(i !=
sl_.end());
375 const State* se =
down_cast<
const State*>(s);
384 typename ls_map::iterator i;
385 for (i =
ls_.begin(); i !=
ls_.end(); ++i)
387 typename transitions_t::iterator i2;
388 for (i2 = i->second.successors.begin();
389 i2 != i->second.successors.end(); ++i2)
390 i2->acceptance_conditions = all - i2->acceptance_conditions;
397 typedef typename transitions_t::iterator trans_t;
398 typedef std::map<int, trans_t> acc_map;
402 typename ls_map::iterator i;
403 for (i =
ls_.begin(); i !=
ls_.end(); ++i)
405 const spot::state* last_dest = 0;
407 typename dest_map::iterator dmi = dm.end();
408 typename transitions_t::iterator t1 = i->second.successors.begin();
413 while (t1 != i->second.successors.end())
415 const spot::state* dest = t1->dest;
416 if (dest != last_dest)
421 dmi = dm.insert(std::make_pair(dest, acc_map())).first;
423 int acc = t1->acceptance_conditions.id();
424 typename acc_map::iterator it = dmi->second.find(acc);
425 if (it == dmi->second.end())
427 dmi->second[acc] = t1;
432 it->second->condition |= t1->condition;
433 t1 = i->second.successors.erase(t1);
443 typename ls_map::iterator i =
ls_.find(name);
446 typename alias_map::iterator j =
alias_.find(name);
451 &(
ls_.insert(std::make_pair(name, State(name))).first->second);
473 typename ls_map::iterator i =
ls_.begin();
475 while (i !=
ls_.end())
487 this->last_support_conditions_input_ = 0;
488 this->last_support_variables_input_ = 0;
502 const tgba* global_automaton = 0)
const
508 (void) global_automaton;
513 ->all_acceptance_conditions());
533 typename sl_map::const_iterator i =
sl_.find(se);
534 assert(i !=
sl_.end());
576 t->acceptance_conditions |= c;
583 bdd sup = bdd_support(f);
585 while (sup != bddtrue)
590 t->acceptance_conditions |= f;
619 bdd neg = bdd_nithvar(v);
629 typename ls_map::iterator i;
630 for (i = this->
ls_.begin(); i != this->
ls_.end(); ++i)
632 typename transitions_t::iterator i2;
633 for (i2 = i->second.successors.begin();
634 i2 != i->second.successors.end(); ++i2)
635 i2->acceptance_conditions &= neg;
643 bdd_dict::fv_map::iterator i = this->
dict_->
acc_map.find(f);
646 bdd v = bdd_ithvar(i->second);
655 const State* s =
down_cast<
const State*>(in);
661 typename transitions_t::const_iterator i;
662 for (i = st.begin(); i != st.end(); ++i)
670 const State* s =
down_cast<
const State*>(in);
676 typename transitions_t::const_iterator i;
677 for (i = st.begin(); i != st.end(); ++i)
678 res &= bdd_support(i->condition);
696 template <
typename State>
714 template <
typename State>
728 const State* st =
down_cast<
const State*>(s);
731 if (st->successors.empty())
733 return (st->successors.front().acceptance_conditions
754 template<
class graph,
typename Type>
763 static std::string
to_string(
const typename Type::label_t& l)
765 std::stringstream ss;
771 template<
class graph>
786 template<
class graph>
814 typedef explicit_conf<tgba_explicit<state_explicit_string>,
830 #endif // SPOT_TGBA_TGBAEXPLICIT_HH