17 #ifndef VCSN_AUTOMATA_CONCEPT_TRANSDUCER_HXX
18 # define VCSN_AUTOMATA_CONCEPT_TRANSDUCER_HXX
20 # include <vaucanson/automata/concept/transducer_base.hh>
24 template <
typename Series,
typename Kind>
25 Transducer<Series, Kind>::Transducer(
const series_set_t& s):
29 template <
typename Series,
typename Kind>
30 const typename Transducer<Series, Kind>::series_set_t&
33 return this->_structure_get();
36 template <
typename Series,
typename Kind>
48 template <
typename S,
typename K,
typename T>
49 inline typename input_projection_helper<Transducer<S, K>, T>::ret
50 input_projection_helper<Transducer<S, K>, T>::
51 make_input_projection_automaton(
const Element<Transducer<S, K>, T>& t)
54 typedef typename ret::set_t set_t;
55 typedef typename set_t::series_set_t series_set_t;
58 auto_set(series_set_t(t.structure().series().
59 semiring().semiring(), t.structure().
65 template <
typename S,
typename K,
typename T>
66 inline typename output_projection_helper<Transducer<S, K>, T>::ret
67 output_projection_helper<Transducer<S, K>, T>::
68 make_output_projection_automaton(
const Element<Transducer<S, K>, T>& t)
71 typedef typename ret::set_t set_t;
72 typedef typename set_t::series_set_t series_set_t;
75 auto_set(series_set_t(t.structure().series().semiring()));
84 template <
typename S,
typename K,
typename T>
85 inline typename input_projection_helper<Automata<S, K>, T>::ret
86 input_projection_helper<Automata<S, K>, T>::
87 make_input_projection_automaton(
const Element<Automata<S, K>, T>& t)
90 typedef typename ret::set_t set_t;
91 typedef typename set_t::series_set_t series_set_t;
94 auto_set(series_set_t(t.structure().series().
95 semiring(), t.structure().series().
96 monoid().first_monoid()));
101 template <
typename S,
typename K,
typename T>
102 inline typename output_projection_helper<Automata<S, K>, T>::ret
103 output_projection_helper<Automata<S, K>, T>::
104 make_output_projection_automaton(
const Element<Automata<S, K>, T>& t)
107 typedef typename ret::set_t set_t;
108 typedef typename set_t::series_set_t series_set_t;
111 auto_set(series_set_t(t.structure().series().
112 semiring(), t.structure().series().
113 monoid().second_monoid()));
115 return ret(auto_set);
118 template <
typename S,
typename K,
typename T>
119 typename identity_transducer_helper<S, K, T>::ret
120 partial_identity(
const Element<S, T>& a)
122 typedef Element<S, T> automaton_t;
123 AUTOMATON_TYPES(automaton_t);
124 typedef typename identity_transducer_helper<S, K, T>::ret ret_t;
125 typedef typename ret_t::series_set_elt_t output_series_set_elt_t;
126 typedef typename series_set_elt_t::support_t support_t;
127 typedef typename ret_t::set_t set_t;
128 typedef typename set_t::series_set_t o_series_set_t;
129 set_t s (o_series_set_t (a.structure().series(),
130 a.structure().series().monoid()));
132 std::vector<hstate_t> conv(a.states().size());
135 conv[ret.add_state()] = *s;
136 for_all_transitions(e, a)
138 series_set_elt_t t = a.series_of(*e);
139 series_set_elt_t s(t);
140 output_series_set_elt_t os(ret.structure().series());
141 support_t supp = s.supp();
142 for_all_const_(support_t, m, supp)
144 series_set_elt_t tmp(a.structure().series());
145 tmp.assoc(*m, s.get(*m));
148 htransition_t f = ret.add_series_transition(conv[a.src_of(*e)],
153 for_all_initial_states(i, a)
154 ret.set_initial(conv[*i], a.get_initial(*i));
155 for_all_final_states(f, a)
156 ret.set_final(conv[*f], a.get_final(*f));
162 #endif // ! VCSN_AUTOMATA_CONCEPT_TRANSDUCER_HXX