17 #ifndef VCSN_AUTOMATA_CONCEPT_AUTOMATA_HH
18 # define VCSN_AUTOMATA_CONCEPT_AUTOMATA_HH
20 # include <vaucanson/automata/concept/automata_base.hh>
26 template <
typename Series,
typename Kind>
31 template <
typename Series,
typename Kind>
33 : dynamic_traits<AutomataBase<Automata<Series, Kind> > >
35 static const bool ret = dynamic_traits<Series>::ret;
39 template <
typename Series,
typename Kind,
typename T>
41 :
MetaElement<AutomataBase<Automata<Series, Kind> >, T>
45 template <
typename Series,
typename Kind>
47 : virtual_types<AutomataBase<Automata<Series, Kind> > >
49 typedef Series series_set_t;
55 template <
typename Series,
typename Kind>
70 template <
typename S,
typename K,
typename T>
71 struct projection_traits<
Automata<S, K>, T>
78 typedef typename automaton_t::series_set_elt_t series_set_elt_t;
80 typedef typename structure_t::series_set_t series_set_t;
82 typedef typename structure_t::series_set_t::semiring_t semiring_t;
84 typedef typename structure_t::series_set_t::monoid_t monoid_t;
86 typedef typename impl_t::monoid_elt_value_t monoid_elt_value_t;
88 typedef typename monoid_t::alphabet_t alphabet_t;
91 typename alphabet_t::value_t>
97 typedef typename word_traits_t::first_monoid_t first_monoid_t;
99 typedef typename word_traits_t::second_monoid_t second_monoid_t;
101 typedef typename algebra::mute_series_traits<series_set_t,
106 typedef typename algebra::mute_series_traits<series_set_t,
108 second_monoid_t>::ret
111 typedef typename mute_graph_impl_traits<impl_t, word_traits_t>::
112 first_projection_t first_impl_t;
114 typedef typename mute_graph_impl_traits<impl_t, word_traits_t>::
115 second_projection_t second_impl_t;
125 static first_projection_t first_projection(
const automaton_t&);
126 static second_projection_t second_projection(
const automaton_t&);
128 typedef automaton_traits<first_impl_t> first_series_traits_t;
130 typedef automaton_traits<second_impl_t> second_series_traits_t;
132 typedef Element<first_series_t,
133 typename first_series_traits_t::series_set_elt_value_t>
134 series_first_projection_t;
136 typedef Element<second_series_t,
137 typename second_series_traits_t::series_set_elt_value_t>
138 series_second_projection_t;
142 static series_first_projection_t
143 series_first_projection(
const first_series_t&,
144 const series_set_elt_t&);
145 static series_second_projection_t
146 series_second_projection(
const second_series_t&,
147 const series_set_elt_t&);
151 # define AUTOMATON_PROJECTION_TYPES() \
152 typedef algebra::alphabet_traits<alphabet_t::set_t, \
153 alphabet_t::value_t> alphabet_traits_t; \
154 typedef alphabet_traits_t::first_projection_t \
155 first_projection_alphabet_t; \
156 typedef alphabet_traits_t::second_projection_t \
157 second_projection_alphabet_t; \
159 typedef algebra::word_traits<monoid_elt_t::set_t, \
160 monoid_elt_t::value_t> word_traits_t; \
161 typedef word_traits_t::first_monoid_t first_monoid_t; \
162 typedef word_traits_t::second_monoid_t second_monoid_t; \
163 typedef word_traits_t::first_projection_t first_projection_word_t; \
164 typedef word_traits_t::second_projection_t second_projection_word_t; \
166 typedef projection_traits<automata_set_t, automaton_impl_t> \
167 projection_traits_t; \
168 typedef projection_traits_t::first_projection_t \
169 first_projection_automaton_t; \
170 typedef projection_traits_t::second_projection_t \
171 second_projection_automaton_t
173 template <
typename Series,
typename Kind>
175 operator==(
const Automata<Series, Kind>&,
const Automata<Series, Kind>&);
180 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
181 # include <vaucanson/automata/concept/automata.hxx>
182 # endif // VCSN_USE_INTERFACE_ONLY
185 #endif // ! VCSN_AUTOMATA_CONCEPT_AUTOMATA_HH