17 #ifndef VCSN_AUTOMATA_CONCEPT_TRANSDUCER_HH
18 # define VCSN_AUTOMATA_CONCEPT_TRANSDUCER_HH
20 # include <vaucanson/design_pattern/design_pattern.hh>
21 # include <vaucanson/automata/concept/automata.hh>
22 # include <vaucanson/automata/concept/automata_base.hh>
23 # include <vaucanson/automata/concept/transducer_base.hh>
27 template <
typename Series,
typename Kind>
32 template <
typename Series,
typename Kind>
34 : dynamic_traits<TransducerBase<Series> >
36 static const bool ret = dynamic_traits<Series>::ret;
40 template <
typename Series,
typename Kind,
typename T>
42 :
MetaElement<TransducerBase<Transducer<Series, Kind> >, T>
46 template <
typename Series,
typename Kind>
49 typedef Series series_set_t;
54 template <
typename Series,
typename Kind>
62 typedef typename virtual_types<self_t>::kind_t
kind_t;
75 template <
typename S,
typename T>
76 struct input_projection_helper
79 template <
typename S,
typename K,
typename T>
80 struct input_projection_helper<Transducer<S, K>, T>
82 typedef Transducer<S, K> structure_t;
84 typedef Element<structure_t, T> automaton_t;
86 typedef typename structure_t::series_set_t::semiring_t
87 typeof_auto_series_set_t;
89 typedef typename structure_t::series_set_t::monoid_t auto_monoid_t;
91 typedef typename typeof_auto_series_set_t::semiring_t auto_semiring_t;
92 typedef typename algebra::mute_series_traits<typeof_auto_series_set_t,
97 typedef typename input_projection_traits<T>::ret auto_impl_t;
98 typedef Element<Automata<auto_series_set_t, K>, auto_impl_t> ret;
100 static ret make_input_projection_automaton(
const automaton_t& t);
103 template <
typename S,
typename K,
typename T>
104 struct input_projection_helper<Automata<S, K>, T>
106 typedef Automata<S, K> structure_t;
108 typedef Element<structure_t, T> automaton_t;
110 typedef typename structure_t::series_set_t typeof_auto_series_set_t;
112 typedef typename structure_t::series_set_t::semiring_t auto_semiring_t;
114 typedef typename structure_t::series_set_t::monoid_t::first_monoid_t
117 typedef typename algebra::mute_series_traits<typeof_auto_series_set_t,
122 typedef typename fmp_input_projection_traits<T>::ret auto_impl_t;
123 typedef Element<Automata<auto_series_set_t, K>, auto_impl_t> ret;
125 static ret make_input_projection_automaton(
const automaton_t& t);
132 template <
typename S,
typename T>
133 struct output_projection_helper
137 template <
typename S,
typename K,
typename T>
138 struct output_projection_helper<Transducer<S, K>, T>
140 typedef Transducer<S, K> structure_t;
142 typedef Element<structure_t, T> automaton_t;
144 typedef typename structure_t::series_set_t::semiring_t
145 typeof_auto_series_set_t;
147 typedef typename structure_t::series_set_t::semiring_t::monoid_t
150 typedef typename typeof_auto_series_set_t::semiring_t auto_semiring_t;
151 typedef typename algebra::mute_series_traits<typeof_auto_series_set_t,
156 typedef typename output_projection_traits<T>::ret auto_impl_t;
157 typedef Element<Automata<auto_series_set_t, K>, auto_impl_t> ret;
159 static ret make_output_projection_automaton(
const automaton_t& t);
166 template <
typename S,
typename K,
typename T>
167 struct output_projection_helper<Automata<S, K>, T>
169 typedef Automata<S, K> structure_t;
171 typedef Element<structure_t, T> automaton_t;
173 typedef typename structure_t::series_set_t typeof_auto_series_set_t;
175 typedef typename structure_t::series_set_t::monoid_t::second_monoid_t
178 typedef typename typeof_auto_series_set_t::semiring_t auto_semiring_t;
179 typedef typename algebra::mute_series_traits<typeof_auto_series_set_t,
184 typedef typename fmp_output_projection_traits<T>::ret auto_impl_t;
185 typedef Element<Automata<auto_series_set_t, K>, auto_impl_t> ret;
187 static ret make_output_projection_automaton(
const automaton_t& t);
194 template <
typename S,
typename K,
typename T>
195 struct identity_transducer_helper
197 typedef typename S::series_set_t series_set_t;
198 typedef typename series_set_t::monoid_t monoid_t;
199 typedef typename series_set_t::semiring_t semiring_t;
200 typedef typename algebra::mute_series_traits<series_set_t, series_set_t, monoid_t>
202 typedef typename extension_traits<T>::ret impl_t;
203 typedef Element<Transducer<tseries_set_t, K>, impl_t> ret;
206 template <
typename S,
typename K,
typename T>
207 typename identity_transducer_helper<S, K, T>::ret
208 partial_identity(
const Element<S, T>&);
210 template <
typename Series,
typename Kind>
212 operator==(
const Transducer<Series, Kind>&,
const Transducer<Series, Kind>&);
217 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
218 # include <vaucanson/automata/concept/transducer.hxx>
219 #endif // VCSN_USE_INTERFACE_ONLY
222 #endif // ! VCSN_AUTOMATA_CONCEPT_TRANSDUCER_HH