17 #ifndef VCSN_ALGORITHMS_COMPLETE_HXX
18 # define VCSN_ALGORITHMS_COMPLETE_HXX
24 # endif // ! VCSN_NDEBUG
26 # include <vaucanson/automata/concept/automata_base.hh>
27 # include <vaucanson/misc/usual_macros.hh>
38 template <
typename A,
typename AI>
45 BENCH_TASK_SCOPED(
"complete");
47 AUTOMATON_TYPES(automaton_t);
48 AUTOMATON_FREEMONOID_TYPES(automaton_t);
50 hstate_t sink_state = work.add_state();
51 bool sink_needed =
false;
58 if (work.states().size() == 1)
61 work.set_initial(sink_state);
64 for_all_const_states(s, work)
65 for_all_const_letters(l, work.
structure().series().monoid().alphabet())
68 for (delta_iterator t(work.
value(), *s); ! t.done(); t.next())
70 monoid_elt_t w(work.series_of(*t).
structure().monoid(), *l);
71 if (work.series_of(*t).get(w) != work.series().semiring().wzero_)
80 work.add_letter_transition(*s, sink_state, *l);
85 work.del_state(sink_state);
92 template <
typename A,
typename AI>
105 template <
typename A,
typename AI>
110 BENCH_TASK_SCOPED(
"is_complete");
111 if (e.states().size() == 0)
114 AUTOMATON_TYPES(automaton_t);
115 AUTOMATON_FREEMONOID_TYPES(automaton_t);
116 const alphabet_t& alpha = e.
structure().series().monoid().alphabet();
117 for_all_const_states(i, e)
119 for_all_const_letters(j, alpha)
122 for (delta_iterator t(e.
value(), *i);
126 monoid_elt_t w(e.series_of(*t).
structure().monoid(), *j);
127 if (e.series_of(*t).get(w) != e.series().semiring().wzero_)
143 #endif // ! VCSN_ALGORITHMS_COMPLETE_HXX