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
00043 template <class S, class T>
00044 const typename automaton_traits<T>::tag_t&
00045 op_get_tag(const AutomataBase<S>&, const T&);
00046
00047 template <class S, class T>
00048 typename automaton_traits<T>::tag_t&
00049 op_get_tag(const AutomataBase<S>&, T&);
00050
00051 template <class S, class T>
00052 const typename automaton_traits<T>::geometry_t&
00053 op_get_geometry(const AutomataBase<S>&, const T&);
00054
00055 template <class S, class T>
00056 typename automaton_traits<T>::geometry_t&
00057 op_get_geometry(const AutomataBase<S>&, T&);
00058
00059 template <class S, class T>
00060 bool
00061 op_exists(const AutomataBase<S>& s, const T&);
00062
00063 template <class S, class T>
00064 typename automaton_traits<T>::states_t
00065 op_states(const AutomataBase<S>&, const T&);
00066
00067 template <class S, class T>
00068 typename automaton_traits<T>::transitions_t
00069 op_transitions(const AutomataBase<S>&, const T&);
00070
00071 template <class S, class T>
00072 typename automaton_traits<T>::initial_support_t
00073 op_initial(const AutomataBase<S>&, const T&);
00074
00075 template <class S, class T>
00076 typename automaton_traits<T>::final_support_t
00077 op_final(const AutomataBase<S>&, const T&);
00078
00079 template <class S, class T>
00080 void
00081 op_set_initial(const AutomataBase<S>&, T&,
00082 hstate_t state,
00083 const AutoType(series_set_elt_t)& s);
00084
00085 template <class S, class T>
00086 AutoType(series_set_elt_t)
00087 op_get_initial(const AutomataBase<S>&,
00088 const T&,
00089 hstate_t state);
00090
00091 template <class S, class T>
00092 void
00093 op_set_final(const AutomataBase<S>&, T&,
00094 hstate_t state,
00095 const typename Element<S, T>::series_set_elt_t& s);
00096
00097 template <class S, class T>
00098 typename Element<S, T>::series_set_elt_t
00099 op_get_final(const AutomataBase<S>&,
00100 const T&,
00101 hstate_t state);
00102
00103 template <class S, class T>
00104 void
00105 op_clear_initial(const AutomataBase<S>&, T&);
00106
00107 template <class S, class T>
00108 void
00109 op_clear_final(const AutomataBase<S>&, T&);
00110
00111 template <class S, class T>
00112 hstate_t
00113 op_add_state(const AutomataBase<S>&, T&);
00114
00115 template <class S, class T>
00116 hstate_t
00117 op_choose_state(const AutomataBase<S>&, T&);
00118
00119 template <class S, class T>
00120 htransition_t
00121 op_add_transition(const AutomataBase<S>&, T&,
00122 hstate_t from,
00123 hstate_t to,
00124 const typename Element<S, T>::label_t& label);
00125
00126 template<class S, class T>
00127 htransition_t
00128 op_add_weighted_transition(const AutomataBase<S>&, T&,
00129 hstate_t from,
00130 hstate_t to,
00131 const typename Element<S, T>::semiring_elt_t& w,
00132 const typename Element<S, T>::monoid_elt_value_t& m);
00133
00134 template <class S, class T>
00135 htransition_t
00136 op_add_series_transition(const AutomataBase<S>&, T&,
00137 hstate_t from,
00138 hstate_t to,
00139 const typename Element<S, T>::series_set_elt_t&);
00140
00141 template <class S, class T>
00142 htransition_t
00143 op_add_spontaneous(const AutomataBase<S>&, T&,
00144 hstate_t from,
00145 hstate_t to,
00146 const typename Element<S, T>::semiring_elt_t&);
00147
00148 template <class S, class T>
00149 htransition_t
00150 op_add_letter_transition(const AutomataBase<S>&, T&,
00151 hstate_t from,
00152 hstate_t to,
00153 const typename Element<S, T>::letter_t&);
00154
00155 template <class S, class T>
00156 void
00157 op_update(const AutomataBase<S>&, T&,
00158 htransition_t,
00159 const AutoType(label_t)& l);
00160
00161 template <class S, class T>
00162 void
00163 op_del_state(const AutomataBase<S>&, T&,
00164 hstate_t);
00165
00166 template <class S, class T>
00167 void
00168 op_del_transition(const AutomataBase<S>&, T&,
00169 htransition_t);
00170
00171 template <class S, class T>
00172 bool
00173 op_has_state(const AutomataBase<S>&, const T&,
00174 hstate_t);
00175
00176 template <class S, class T>
00177 bool
00178 op_has_transition(const AutomataBase<S>&, const T&,
00179 htransition_t);
00180
00181 template <class S, class T>
00182 hstate_t
00183 op_src_of(const AutomataBase<S>&, const T&,
00184 htransition_t);
00185
00186 template <class S, class T>
00187 hstate_t
00188 op_dst_of(const AutomataBase<S>&, const T&,
00189 htransition_t);
00190
00191 template <class S, class T>
00192 typename Element<S, T>::label_t
00193 op_label_of(const AutomataBase<S>&, const T&,
00194 htransition_t);
00195
00196 template <class S, class T>
00197 const typename Element<S, T>::series_set_elt_t
00198 op_series_of(const AutomataBase<S>&, const T&,
00199 htransition_t);
00200
00201 template <class S, class T>
00202 typename Element<S, T>::series_set_elt_value_t
00203 op_series_value_of(const AutomataBase<S>&, const T&,
00204 htransition_t);
00205
00206
00207 template <class S, class T>
00208 typename Element<S, T>::monoid_elt_t
00209 op_word_of(const AutomataBase<S>&, const T&,
00210 htransition_t);
00211
00212 template <class S, class T>
00213 typename Element<S, T>::semiring_elt_t
00214 op_weight_of(const AutomataBase<S>&, const T&,
00215 htransition_t);
00216
00217 template <class S, class T>
00218 typename Element<S, T>::monoid_elt_value_t
00219 op_word_value_of(const AutomataBase<S>&, const T&,
00220 htransition_t);
00221
00222 template <class S, class T>
00223 typename Element<S, T>::letter_t
00224 op_letter_of(const AutomataBase<S>&, const T&,
00225 htransition_t);
00226
00227 template <class S, class T>
00228 bool
00229 op_is_spontaneous(const AutomataBase<S>&, const T&,
00230 htransition_t);
00231
00233
00234
00235
00236
00237
00239 template <class S, class T,
00240 typename OutputIterator>
00241 void op_delta(const AutomataBase<S>&, const T&,
00242 OutputIterator res,
00243 hstate_t from,
00244 delta_kind::transitions k);
00245
00252 template <class S, class T,
00253 typename OutputIterator, typename L>
00254 void op_delta(const AutomataBase<S>&, const T&,
00255 OutputIterator res,
00256 hstate_t from,
00257 const L& query,
00258 delta_kind::transitions k);
00259
00266 template <class S, class T,
00267 typename OutputIterator, typename L>
00268 void op_letter_delta(const AutomataBase<S>&, const T&,
00269 OutputIterator res,
00270 hstate_t from,
00271 const L& letter,
00272 delta_kind::transitions k);
00273
00275 template <class S, class T,
00276 typename OutputIterator>
00277 void op_spontaneous_delta(const AutomataBase<S>&, const T&,
00278 OutputIterator res,
00279 hstate_t from,
00280 delta_kind::transitions k);
00281
00282
00283
00284
00285
00287 template <class S, class T,
00288 typename Container>
00289 void op_deltac(const AutomataBase<S>&, const T&,
00290 Container& res, hstate_t from, delta_kind::transitions k);
00291
00298 template <class S, class T,
00299 typename Container, typename L>
00300 void op_deltac(const AutomataBase<S>&, const T&,
00301 Container& res,
00302 hstate_t from,
00303 const L& query,
00304 delta_kind::transitions k);
00305
00312 template <class S, class T,
00313 typename Container, typename L>
00314 void op_letter_deltac(const AutomataBase<S>&, const T&,
00315 Container& res,
00316 hstate_t from,
00317 const L& letter,
00318 delta_kind::transitions k);
00319
00321 template <class S, class T, class Container>
00322 void op_spontaneous_deltac(const AutomataBase<S>&, const T&,
00323 Container& res,
00324 hstate_t from,
00325 delta_kind::transitions k);
00326
00327
00328
00329
00330
00332 template<class S, class T, typename OutputIterator>
00333 void op_delta(const AutomataBase<S>&, const T&,
00334 OutputIterator res,
00335 hstate_t from,
00336 delta_kind::states k);
00337
00344 template<class S, class T, typename OutputIterator, typename L>
00345 void op_delta(const AutomataBase<S>&, const T&,
00346 OutputIterator res,
00347 hstate_t from,
00348 const L& query,
00349 delta_kind::states k);
00350
00357 template<class S, class T, typename OutputIterator, typename L>
00358 void op_letter_delta(const AutomataBase<S>&, const T&,
00359 OutputIterator res,
00360 hstate_t from,
00361 const L& letter,
00362 delta_kind::states k);
00363
00365 template<class S, class T, typename OutputIterator>
00366 void op_spontaneous_delta(const AutomataBase<S>&, const T&,
00367 OutputIterator res,
00368 hstate_t from,
00369 delta_kind::states k);
00370
00371
00372
00373
00374
00376 template<class S, class T, typename Container>
00377 void op_deltac(const AutomataBase<S>&, const T&,
00378 Container& res, hstate_t from, delta_kind::states k);
00379
00386 template<class S, class T, typename Container, typename L>
00387 void op_deltac(const AutomataBase<S>&, const T&,
00388 Container& res,
00389 hstate_t from,
00390 const L& query,
00391 delta_kind::states k);
00392
00399 template<class S, class T, typename Container, typename L>
00400 void op_letter_deltac(const AutomataBase<S>&, const T&,
00401 Container& res,
00402 hstate_t from,
00403 const L& letter,
00404 delta_kind::states k);
00405
00407 template<class S, class T, typename Container>
00408 void op_spontaneous_deltac(const AutomataBase<S>&, const T&,
00409 Container& res,
00410 hstate_t from,
00411 delta_kind::states k);
00412
00413
00414
00415
00416
00418 template<class S, class T, typename OutputIterator>
00419 void op_rdelta(const AutomataBase<S>&, const T&,
00420 OutputIterator res,
00421 hstate_t from,
00422 delta_kind::transitions k);
00423
00430 template<class S, class T, typename OutputIterator, typename L>
00431 void op_rdelta(const AutomataBase<S>&, const T&,
00432 OutputIterator res,
00433 hstate_t from,
00434 const L& query,
00435 delta_kind::transitions k);
00436
00443 template<class S, class T, typename OutputIterator, typename L>
00444 void op_letter_rdelta(const AutomataBase<S>&, const T&,
00445 OutputIterator res,
00446 hstate_t from,
00447 const L& letter,
00448 delta_kind::transitions k);
00449
00451 template<class S, class T, typename OutputIterator>
00452 void op_spontaneous_rdelta(const AutomataBase<S>&, const T&,
00453 OutputIterator res,
00454 hstate_t from,
00455 delta_kind::transitions k);
00456
00457
00458
00459
00460
00462 template<class S, class T, typename Container>
00463 void op_rdeltac(const AutomataBase<S>&, const T&,
00464 Container& res, hstate_t from, delta_kind::transitions k);
00465
00472 template<class S, class T, typename Container, typename L>
00473 void op_rdeltac(const AutomataBase<S>&, const T&,
00474 Container& res,
00475 hstate_t from,
00476 const L& query,
00477 delta_kind::transitions k);
00478
00485 template<class S, class T, typename Container, typename L>
00486 void op_letter_rdeltac(const AutomataBase<S>&, const T&,
00487 Container& res,
00488 hstate_t from,
00489 const L& letter,
00490 delta_kind::transitions k);
00491
00493 template<class S, class T, typename Container>
00494 void op_spontaneous_rdeltac(const AutomataBase<S>&, const T&,
00495 Container& res,
00496 hstate_t from,
00497 delta_kind::transitions k);
00498
00499
00500
00501
00502
00504 template<class S, class T, typename OutputIterator>
00505 void op_rdelta(const AutomataBase<S>&, const T&,
00506 OutputIterator res,
00507 hstate_t from,
00508 delta_kind::states k);
00509
00516 template<class S, class T, typename OutputIterator, typename L>
00517 void op_rdelta(const AutomataBase<S>&, const T&,
00518 OutputIterator res,
00519 hstate_t from,
00520 const L& query,
00521 delta_kind::states k);
00522
00529 template<class S, class T, typename OutputIterator, typename L>
00530 void op_letter_rdelta(const AutomataBase<S>&, const T&,
00531 OutputIterator res,
00532 hstate_t from,
00533 const L& letter,
00534 delta_kind::states k);
00535
00537 template<class S, class T, typename OutputIterator>
00538 void op_spontaneous_rdelta(const AutomataBase<S>&, const T&,
00539 OutputIterator res,
00540 hstate_t from,
00541 delta_kind::states k);
00542
00543
00544
00545
00546
00548 template<class S, class T, typename Container>
00549 void op_rdeltac(const AutomataBase<S>&, const T&,
00550 Container& res, hstate_t from, delta_kind::states k);
00551
00558 template<class S, class T, typename Container, typename L>
00559 void op_rdeltac(const AutomataBase<S>&, const T&,
00560 Container& res,
00561 hstate_t from,
00562 const L& query,
00563 delta_kind::states k);
00564
00571 template<class S, class T, typename Container, typename L>
00572 void op_letter_rdeltac(const AutomataBase<S>&, const T&,
00573 Container& res,
00574 hstate_t from,
00575 const L& letter,
00576 delta_kind::states k);
00577
00579 template<class S, class T, typename Container>
00580 void op_spontaneous_rdeltac(const AutomataBase<S>&, const T&,
00581 Container& res,
00582 hstate_t from,
00583 delta_kind::states k);
00584
00588 }
00589
00590
00591 # ifndef VCSN_USE_INTERFACE_ONLY
00592 # include <vaucanson/automata/concept/automata_ops.hxx>
00593 # endif // VCSN_USE_INTERFACE_ONLY
00594
00595
00596 #endif // ! VCSN_AUTOMATA_CONCEPT_AUTOMATA_OPS_HH