17 #ifndef VCSN_ALGORITHMS_PAIR_TO_FMP_HH
18 # define VCSN_ALGORITHMS_PAIR_TO_FMP_HH
23 # include <vaucanson/automata/concept/automata.hh>
24 # include <vaucanson/algebra/concept/freemonoid_product.hh>
25 # include <vaucanson/algebra/implementation/alphabets/alphabet_set.hh>
26 # include <vaucanson/algebra/implementation/monoid/free_monoid.hh>
29 # include <vaucanson/algebra/implementation/monoid/pair_str_words.hh>
56 template <
typename S,
typename T>
57 struct mute_pair_to_fmp
60 typedef Element<S, T> automaton_t;
63 typedef typename automaton_t::monoid_elt_t monoid_elt_t;
66 typedef typename monoid_elt_t::set_t::alphabet_t alphabet_t;
69 typedef algebra::alphabet_traits<
typename alphabet_t::set_t,
70 typename alphabet_t::value_t> alphabet_traits_t;
73 typedef algebra::word_traits<
typename monoid_elt_t::set_t,
74 typename monoid_elt_t::value_t> word_traits_t;
83 typedef typename automaton_t::semiring_t semiring_t;
86 typedef typename first_monoid_t::alphabet_t ret_first_alphabet_t;
89 typedef typename second_monoid_t::alphabet_t ret_second_alphabet_t;
94 typedef algebra::FreeMonoidProduct<first_monoid_t,
95 second_monoid_t> ret_monoid_t;
98 typedef std::pair<
typename word_traits_t::first_projection_t::value_t,
99 typename word_traits_t::second_projection_t::value_t>
103 typedef Element<ret_monoid_t, ret_word_impl_t> ret_monoid_elt_t;
108 typedef typename algebra::
109 mute_series_traits<
typename automaton_t::series_set_t,
110 typename automaton_t::semiring_t,
113 typedef Automata<ret_series_set_t, typename automaton_t::kind_t> ret_set_t;
116 typedef typename mute_graph_impl_monoid_traits<
typename automaton_t::
117 value_t, ret_word_impl_t, undefined_type>::ret ret_impl_t;
120 typedef Element<ret_set_t, ret_impl_t> ret;
124 make_automaton(
const ret_first_alphabet_t&,
const ret_second_alphabet_t&);
127 make_automaton(
const automaton_t&);
130 static typename ret::series_set_elt_t
131 series_convert(
const ret_series_set_t&,
132 const typename automaton_t::series_set_elt_t&);
135 template <
typename S,
typename T>
137 pair_to_fmp(
const Element<S, T>& aut,
138 typename mute_pair_to_fmp<S, T>::ret& res);
140 template <
typename S,
typename T>
141 typename mute_pair_to_fmp<S, T>::ret
142 pair_to_fmp(
const Element<S, T>& aut);
150 # if !defined VCSN_USE_INTERFACE_ONLY && !defined VCSN_USE_LIB
151 # include <vaucanson/algorithms/pair_to_fmp.hxx>
152 # endif // ! VCSN_USE_INTERFACE_ONLY
154 #endif // ! VCSN_ALGORITHMS_PAIR_TO_FMP_HH