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);
342 return ls_.find(name) !=
ls_.end();
347 typename sl_map::const_iterator i =
sl_.find(s);
348 assert(i !=
sl_.end());
354 const State* se =
down_cast<
const State*>(s);
363 typename ls_map::iterator i;
364 for (i =
ls_.begin(); i !=
ls_.end(); ++i)
366 typename transitions_t::iterator i2;
367 for (i2 = i->second.successors.begin();
368 i2 != i->second.successors.end(); ++i2)
369 i2->acceptance_conditions = all - i2->acceptance_conditions;
376 typedef typename transitions_t::iterator trans_t;
377 typedef std::map<int, trans_t> acc_map;
381 typename ls_map::iterator i;
382 for (i =
ls_.begin(); i !=
ls_.end(); ++i)
384 const spot::state* last_dest = 0;
386 typename dest_map::iterator dmi = dm.end();
387 typename transitions_t::iterator t1 = i->second.successors.begin();
392 while (t1 != i->second.successors.end())
394 const spot::state* dest = t1->dest;
395 if (dest != last_dest)
400 dmi = dm.insert(std::make_pair(dest, acc_map())).first;
402 int acc = t1->acceptance_conditions.id();
403 typename acc_map::iterator it = dmi->second.find(acc);
404 if (it == dmi->second.end())
406 dmi->second[acc] = t1;
411 it->second->condition |= t1->condition;
412 t1 = i->second.successors.erase(t1);
422 typename ls_map::iterator i =
ls_.find(name);
425 typename alias_map::iterator j =
alias_.find(name);
430 &(
ls_.insert(std::make_pair(name, State(name))).first->second);
452 typename ls_map::iterator i =
ls_.begin();
454 while (i !=
ls_.end())
466 this->last_support_conditions_input_ = 0;
467 this->last_support_variables_input_ = 0;
481 const tgba* global_automaton = 0)
const
487 (void) global_automaton;
492 ->all_acceptance_conditions());
512 typename sl_map::const_iterator i =
sl_.find(se);
513 assert(i !=
sl_.end());
555 t->acceptance_conditions |= c;
562 bdd sup = bdd_support(f);
564 while (sup != bddtrue)
569 t->acceptance_conditions |= f;
598 bdd neg = bdd_nithvar(v);
608 typename ls_map::iterator i;
609 for (i = this->
ls_.begin(); i != this->
ls_.end(); ++i)
611 typename transitions_t::iterator i2;
612 for (i2 = i->second.successors.begin();
613 i2 != i->second.successors.end(); ++i2)
614 i2->acceptance_conditions &= neg;
622 bdd_dict::fv_map::iterator i = this->
dict_->
acc_map.find(f);
625 bdd v = bdd_ithvar(i->second);
634 const State* s =
down_cast<
const State*>(in);
640 typename transitions_t::const_iterator i;
641 for (i = st.begin(); i != st.end(); ++i)
649 const State* s =
down_cast<
const State*>(in);
655 typename transitions_t::const_iterator i;
656 for (i = st.begin(); i != st.end(); ++i)
657 res &= bdd_support(i->condition);
675 template <
typename State>
693 template <
typename State>
707 const State* st =
down_cast<
const State*>(s);
710 if (st->successors.empty())
712 return (st->successors.front().acceptance_conditions
733 template<
class graph,
typename Type>
742 static std::string
to_string(
const typename Type::label_t& l)
744 std::stringstream ss;
750 template<
class graph>
765 template<
class graph>
793 typedef explicit_conf<tgba_explicit<state_explicit_string>,
809 #endif // SPOT_TGBA_TGBAEXPLICIT_HH