00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_AUTOMATA_CONCEPT_AUTOMATA_OPS_HH
00018 # define VCSN_AUTOMATA_CONCEPT_AUTOMATA_OPS_HH
00019
00030 # include <vaucanson/automata/concept/automata_base.hh>
00031
00032 namespace vcsn {
00033
00034 #define AutoType(Type) \
00035 typename Element<S, T>::Type
00036
00040
00041
00042
00044 template<typename S, typename R, typename T>
00045 R op_convert(const AutomataBase<S> &se,
00046 SELECTOR(R), const T& data);
00047
00048 template<typename S, typename T>
00049 const T& op_convert(const AutomataBase<S>&,
00050 SELECTOR(T), const T& from_data);
00051
00053 template<typename S, typename T, typename U>
00054 void
00055 op_assign(const AutomataBase<S>& s,
00056 T& dst, const U& src);
00057
00058 template<typename S, typename T>
00059 void
00060 op_assign(const AutomataBase<S>& concept, T& dst, const T& src);
00061
00062 template <class S, class T>
00063 const typename automaton_traits<T>::tag_t&
00064 op_get_tag(const AutomataBase<S>&, const T&);
00065
00066 template <class S, class T>
00067 typename automaton_traits<T>::tag_t&
00068 op_get_tag(const AutomataBase<S>&, T&);
00069
00070 template <class S, class T>
00071 const typename automaton_traits<T>::geometry_t&
00072 op_get_geometry(const AutomataBase<S>&, const T&);
00073
00074 template <class S, class T>
00075 typename automaton_traits<T>::geometry_t&
00076 op_get_geometry(const AutomataBase<S>&, T&);
00077
00078 template <class S, class T>
00079 bool
00080 op_exists(const AutomataBase<S>& s, const T&);
00081
00082 template <class S, class T>
00083 typename automaton_traits<T>::states_t
00084 op_states(const AutomataBase<S>&, const T&);
00085
00086 template <class S, class T>
00087 typename automaton_traits<T>::hstate_t
00088 op_get_state(const AutomataBase<S>&, const T&, int state);
00089
00090 template <class S, class T>
00091 typename automaton_traits<T>::transitions_t
00092 op_transitions(const AutomataBase<S>&, const T&);
00093
00094 template <class S, class T>
00095 typename automaton_traits<T>::initial_support_t
00096 op_initial(const AutomataBase<S>&, const T&);
00097
00098 template <class S, class T>
00099 typename automaton_traits<T>::final_support_t
00100 op_final(const AutomataBase<S>&, const T&);
00101
00102 template <class S, class T>
00103 void
00104 op_set_initial(const AutomataBase<S>&, T&,
00105 const typename automaton_traits<T>::hstate_t& state,
00106 const AutoType(series_set_elt_t)& s);
00107
00108 template <class S, class T>
00109 AutoType(series_set_elt_t)
00110 op_get_initial(const AutomataBase<S>&,
00111 const T&,
00112 const typename automaton_traits<T>::hstate_t& state);
00113
00114 template <class S, class T>
00115 bool
00116 op_is_initial(const AutomataBase<S>&,
00117 const T&,
00118 const typename automaton_traits<T>::hstate_t& state);
00119
00120 template <class S, class T>
00121 void
00122 op_set_final(const AutomataBase<S>&, T&,
00123 const typename automaton_traits<T>::hstate_t& state,
00124 const typename Element<S, T>::series_set_elt_t& s);
00125
00126 template <class S, class T>
00127 typename Element<S, T>::series_set_elt_t
00128 op_get_final(const AutomataBase<S>&,
00129 const T&,
00130 const typename automaton_traits<T>::hstate_t& state);
00131
00132 template <class S, class T>
00133 bool
00134 op_is_final(const AutomataBase<S>&,
00135 const T&,
00136 const typename automaton_traits<T>::hstate_t& state);
00137
00138 template <class S, class T>
00139 void
00140 op_set_initial(const AutomataBase<S>&, T&,
00141 int state,
00142 const AutoType(series_set_elt_t)& s);
00143
00144 template <class S, class T>
00145 AutoType(series_set_elt_t)
00146 op_get_initial(const AutomataBase<S>&,
00147 const T&,
00148 int state);
00149
00150 template <class S, class T>
00151 bool
00152 op_is_initial(const AutomataBase<S>&,
00153 const T&,
00154 int state);
00155
00156 template <class S, class T>
00157 void
00158 op_set_final(const AutomataBase<S>&, T&,
00159 int state,
00160 const typename Element<S, T>::series_set_elt_t& s);
00161
00162 template <class S, class T>
00163 typename Element<S, T>::series_set_elt_t
00164 op_get_final(const AutomataBase<S>&,
00165 const T&,
00166 int state);
00167
00168 template <class S, class T>
00169 bool
00170 op_is_final(const AutomataBase<S>&,
00171 const T&,
00172 int state);
00173
00174 template <class S, class T>
00175 void
00176 op_clear_initial(const AutomataBase<S>&, T&);
00177
00178 template <class S, class T>
00179 void
00180 op_clear_final(const AutomataBase<S>&, T&);
00181
00182 template <class S, class T>
00183 typename automaton_traits<T>::hstate_t
00184 op_add_state(const AutomataBase<S>&, T&);
00185
00186 template <class S, class T>
00187 typename automaton_traits<T>::hstate_t
00188 op_choose_state(const AutomataBase<S>&, T&);
00189
00190 template <class S, class T>
00191 typename automaton_traits<T>::htransition_t
00192 op_add_transition(const AutomataBase<S>&, T&,
00193 const typename automaton_traits<T>::hstate_t& from,
00194 const typename automaton_traits<T>::hstate_t& to,
00195 const typename Element<S, T>::label_t& label);
00196
00197 template<class S, class T>
00198 typename automaton_traits<T>::htransition_t
00199 op_add_weighted_transition(const AutomataBase<S>&, T&,
00200 const typename automaton_traits<T>::hstate_t& from,
00201 const typename automaton_traits<T>::hstate_t& to,
00202 const typename Element<S, T>::semiring_elt_t& w,
00203 const typename Element<S, T>::monoid_elt_value_t& m);
00204
00205 template <class S, class T>
00206 typename automaton_traits<T>::htransition_t
00207 op_add_series_transition(const AutomataBase<S>&, T&,
00208 const typename automaton_traits<T>::hstate_t& from,
00209 const typename automaton_traits<T>::hstate_t& to,
00210 const typename Element<S, T>::series_set_elt_t&);
00211
00212 template <class S, class T>
00213 typename automaton_traits<T>::htransition_t
00214 op_add_spontaneous(const AutomataBase<S>&, T&,
00215 const typename automaton_traits<T>::hstate_t& from,
00216 const typename automaton_traits<T>::hstate_t& to,
00217 const typename Element<S, T>::semiring_elt_t&);
00218
00219 template <class S, class T>
00220 typename automaton_traits<T>::htransition_t
00221 op_add_letter_transition(const AutomataBase<S>&, T&,
00222 const typename automaton_traits<T>::hstate_t& from,
00223 const typename automaton_traits<T>::hstate_t& to,
00224 const typename Element<S, T>::letter_t&);
00225
00226 template <class S, class T>
00227 typename automaton_traits<T>::htransition_t
00228 op_add_transition(const AutomataBase<S>&, T&,
00229 int from,
00230 int to,
00231 const typename Element<S, T>::label_t& label);
00232
00233 template<class S, class T>
00234 typename automaton_traits<T>::htransition_t
00235 op_add_weighted_transition(const AutomataBase<S>&, T&,
00236 int from,
00237 int to,
00238 const typename Element<S, T>::semiring_elt_t& w,
00239 const typename Element<S, T>::monoid_elt_value_t& m);
00240
00241 template <class S, class T>
00242 typename automaton_traits<T>::htransition_t
00243 op_add_series_transition(const AutomataBase<S>&, T&,
00244 int from,
00245 int to,
00246 const typename Element<S, T>::series_set_elt_t&);
00247
00248 template <class S, class T>
00249 typename automaton_traits<T>::htransition_t
00250 op_add_spontaneous(const AutomataBase<S>&, T&,
00251 int from,
00252 int to,
00253 const typename Element<S, T>::semiring_elt_t&);
00254
00255 template <class S, class T>
00256 typename automaton_traits<T>::htransition_t
00257 op_add_letter_transition(const AutomataBase<S>&, T&,
00258 int from,
00259 int to,
00260 const typename Element<S, T>::letter_t&);
00261
00262 template <class S, class T>
00263 void
00264 op_update(const AutomataBase<S>&, T&,
00265 const typename automaton_traits<T>::htransition_t&,
00266 const AutoType(label_t)& l);
00267
00268 template <class S, class T>
00269 void
00270 op_del_state(const AutomataBase<S>&, T&,
00271 const typename automaton_traits<T>::hstate_t&);
00272
00273 template <class S, class T>
00274 void
00275 op_del_state(const AutomataBase<S>&, T&,
00276 int);
00277
00278 template <class S, class T>
00279 void
00280 op_del_transition(const AutomataBase<S>&, T&,
00281 const typename automaton_traits<T>::htransition_t&);
00282
00283 template <class S, class T>
00284 bool
00285 op_has_state(const AutomataBase<S>&, const T&,
00286 const typename automaton_traits<T>::hstate_t&);
00287
00288 template <class S, class T>
00289 bool
00290 op_has_state(const AutomataBase<S>&, const T&,
00291 int);
00292
00293 template <class S, class T>
00294 bool
00295 op_has_transition(const AutomataBase<S>&, const T&,
00296 const typename automaton_traits<T>::htransition_t&);
00297
00298 template <class S, class T>
00299 typename automaton_traits<T>::hstate_t
00300 op_src_of(const AutomataBase<S>&, const T&,
00301 const typename automaton_traits<T>::htransition_t&);
00302
00303 template <class S, class T>
00304 typename automaton_traits<T>::hstate_t
00305 op_dst_of(const AutomataBase<S>&, const T&,
00306 const typename automaton_traits<T>::htransition_t&);
00307
00308 template <class S, class T>
00309 typename Element<S, T>::label_t
00310 op_label_of(const AutomataBase<S>&, const T&,
00311 const typename automaton_traits<T>::htransition_t&);
00312
00313 template <class S, class T>
00314 const typename Element<S, T>::series_set_elt_t
00315 op_series_of(const AutomataBase<S>&, const T&,
00316 const typename automaton_traits<T>::htransition_t&);
00317
00318 template <class S, class T>
00319 typename Element<S, T>::series_set_elt_value_t
00320 op_series_value_of(const AutomataBase<S>&, const T&,
00321 const typename automaton_traits<T>::htransition_t&);
00322
00323
00324 template <class S, class T>
00325 typename Element<S, T>::monoid_elt_t
00326 op_word_of(const AutomataBase<S>&, const T&,
00327 const typename automaton_traits<T>::htransition_t&);
00328
00329 template <class S, class T>
00330 typename Element<S, T>::semiring_elt_t
00331 op_weight_of(const AutomataBase<S>&, const T&,
00332 const typename automaton_traits<T>::htransition_t&);
00333
00334 template <class S, class T>
00335 typename Element<S, T>::monoid_elt_value_t
00336 op_word_value_of(const AutomataBase<S>&, const T&,
00337 const typename automaton_traits<T>::htransition_t&);
00338
00339 template <class S, class T>
00340 typename Element<S, T>::letter_t
00341 op_letter_of(const AutomataBase<S>&, const T&,
00342 const typename automaton_traits<T>::htransition_t&);
00343
00344 template <class S, class T>
00345 bool
00346 op_is_spontaneous(const AutomataBase<S>&, const T&,
00347 const typename automaton_traits<T>::htransition_t&);
00348
00350
00354 }
00355
00356
00357 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00358 # include <vaucanson/automata/concept/automata_ops.hxx>
00359 # endif // VCSN_USE_INTERFACE_ONLY
00360
00361 #endif // ! VCSN_AUTOMATA_CONCEPT_AUTOMATA_OPS_HH