00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_AUTOMATA_CONCEPT_AUTOMATA_BASE_HXX
00018 # define VCSN_AUTOMATA_CONCEPT_AUTOMATA_BASE_HXX
00019
00020 # include <vaucanson/automata/concept/copy.hh>
00021 # include <vaucanson/automata/concept/automata_base.hh>
00022 # include <vaucanson/automata/concept/automata_ops.hh>
00023
00024 namespace vcsn {
00025
00026 template <typename Self>
00027 AutomataBase<Self>::AutomataBase()
00028 {}
00029
00030 template <typename Self>
00031 AutomataBase<Self>::AutomataBase(const AutomataBase& other) :
00032 Structure<Self>(other)
00033 {}
00034
00035 template <typename Self>
00036 const typename AutomataBase<Self>::series_set_t&
00037 AutomataBase<Self>::series() const
00038 {
00039 return this->self().series();
00040 }
00041
00042
00044 template <typename Self, typename T>
00045 MetaElement<AutomataBase<Self>, T>::MetaElement()
00046 {}
00047
00049 template <typename Self, typename T>
00050 MetaElement<AutomataBase<Self>, T>::MetaElement(const MetaElement& a):
00051 MetaElement<Structure<Self>, T>::MetaElement(a)
00052 {}
00053
00055 template <typename Self, typename T>
00056 typename MetaElement<AutomataBase<Self>, T>::tag_t&
00057 MetaElement<AutomataBase<Self>, T>::tag()
00058 {
00059 return op_tag(this->structure(), this->value());
00060 }
00061
00063 template <typename Self, typename T>
00064 const typename MetaElement<AutomataBase<Self>, T>::tag_t&
00065 MetaElement<AutomataBase<Self>, T>:: tag() const
00066 {
00067 return op_tag(this->structure(), this->value());
00068 }
00069
00071 template <typename Self, typename T>
00072 typename MetaElement<AutomataBase<Self>, T>::geometry_t&
00073 MetaElement<AutomataBase<Self>, T>::geometry()
00074 {
00075 return op_geometry(this->structure(), this->value());
00076 }
00077
00079 template <typename Self, typename T>
00080 const typename MetaElement<AutomataBase<Self>, T>::geometry_t&
00081 MetaElement<AutomataBase<Self>, T>::geometry() const
00082 {
00083 return op_geometry(this->structure(), this->value());
00084 }
00085
00087 template <typename Self, typename T>
00088 bool
00089 MetaElement<AutomataBase<Self>, T>::exists() const
00090 {
00091 return op_exists(this->structure(), this->value());
00092 }
00093
00095 template <typename Self, typename T>
00096 typename automaton_traits<T>::states_t
00097 MetaElement<AutomataBase<Self>, T>::states() const
00098 {
00099 return op_states(this->structure(), this->value());
00100 }
00101
00103 template <typename Self, typename T>
00104 typename automaton_traits<T>::transitions_t
00105 MetaElement<AutomataBase<Self>, T>::transitions() const
00106 {
00107 return op_transitions(this->structure(), this->value());
00108 }
00109
00111 template <typename Self, typename T>
00112 const typename MetaElement<AutomataBase<Self>, T>::series_set_t&
00113 MetaElement<AutomataBase<Self>, T>::series() const
00114 {
00115 return this->structure().series();
00116 }
00117
00119 template <typename Self, typename T>
00120 typename automaton_traits<T>::initial_support_t
00121 MetaElement<AutomataBase<Self>, T>::initial() const
00122 {
00123 return op_initial(this->structure(), this->value());
00124 }
00125
00127 template <typename Self, typename T>
00128 typename automaton_traits<T>::final_support_t
00129
00130 MetaElement<AutomataBase<Self>, T>::final() const
00131 {
00132 return op_final(this->structure(), this->value());
00133 }
00134
00137 template <typename Self, typename T>
00138 bool
00139 MetaElement<AutomataBase<Self>, T>::is_initial(const typename automaton_traits<T>::hstate_t& state) const
00140 {
00141 return op_is_initial(this->structure(), this->value(), state);
00142 }
00143
00144 template <typename Self, typename T>
00145 bool
00146 MetaElement<AutomataBase<Self>, T>::is_initial(unsigned state) const
00147 {
00148 return op_is_initial(this->structure(), this->value(), state);
00149 }
00150
00152 template <typename Self, typename T>
00153 bool
00154 MetaElement<AutomataBase<Self>, T>::is_final(const typename automaton_traits<T>::hstate_t& state) const
00155 {
00156 return op_is_final(this->structure(), this->value(), state);
00157 }
00158
00159 template <typename Self, typename T>
00160 bool
00161 MetaElement<AutomataBase<Self>, T>::is_final(unsigned state) const
00162 {
00163 return op_is_final(this->structure(), this->value(), state);
00164 }
00165
00167 template <typename Self, typename T>
00168 void
00169 MetaElement<AutomataBase<Self>, T>::set_initial(const typename automaton_traits<T>::hstate_t& state)
00170 {
00171 op_set_initial(this->structure(),
00172 this->value(),
00173 state,
00174 this->structure().series().
00175 identity(SELECT(series_set_elt_value_t)));
00176 }
00177
00178 template <typename Self, typename T>
00179 void
00180 MetaElement<AutomataBase<Self>, T>::set_initial(unsigned state)
00181 {
00182 op_set_initial(this->structure(),
00183 this->value(),
00184 state,
00185 this->structure().series().
00186 identity(SELECT(series_set_elt_value_t)));
00187 }
00188
00190 template <typename Self, typename T>
00191 void
00192 MetaElement<AutomataBase<Self>, T>::
00193 set_initial(const typename automaton_traits<T>::hstate_t& state, const series_set_elt_t& s)
00194 {
00195 op_set_initial(this->structure(), this->value(), state, s);
00196 }
00197
00198 template <typename Self, typename T>
00199 void
00200 MetaElement<AutomataBase<Self>, T>::
00201 set_initial(unsigned state, const series_set_elt_t& s)
00202 {
00203 op_set_initial(this->structure(), this->value(), state, s);
00204 }
00205
00207 template <typename Self, typename T>
00208 void
00209 MetaElement<AutomataBase<Self>, T>::set_final(const typename automaton_traits<T>::hstate_t& state)
00210 {
00211 op_set_final(this->structure(),
00212 this->value(),
00213 state,
00214 this->structure().series().
00215 identity(SELECT(series_set_elt_value_t)));
00216 }
00217
00218 template <typename Self, typename T>
00219 void
00220 MetaElement<AutomataBase<Self>, T>::set_final(unsigned state)
00221 {
00222 op_set_final(this->structure(),
00223 this->value(),
00224 state,
00225 this->structure().series().
00226 identity(SELECT(series_set_elt_value_t)));
00227 }
00228
00230 template <typename Self, typename T>
00231 void
00232 MetaElement<AutomataBase<Self>, T>::
00233 set_final(const typename automaton_traits<T>::hstate_t& state, const series_set_elt_t& s)
00234 {
00235 op_set_final(this->structure(), this->value(), state, s);
00236 }
00237
00238 template <typename Self, typename T>
00239 void
00240 MetaElement<AutomataBase<Self>, T>::
00241 set_final(unsigned state, const series_set_elt_t& s)
00242 {
00243 op_set_final(this->structure(), this->value(), state, s);
00244 }
00245
00247 template <typename Self, typename T>
00248 void
00249 MetaElement<AutomataBase<Self>, T>::unset_initial(const typename automaton_traits<T>::hstate_t& state)
00250 {
00251 op_set_initial(this->structure(),
00252 this->value(),
00253 state,
00254 algebra::zero_as<series_set_elt_value_t>::
00255 of(this->structure().series()));
00256 }
00257
00258 template <typename Self, typename T>
00259 void
00260 MetaElement<AutomataBase<Self>, T>::unset_initial(unsigned state)
00261 {
00262 op_set_initial(this->structure(),
00263 this->value(),
00264 state,
00265 algebra::zero_as<series_set_elt_value_t>::
00266 of(this->structure().series()));
00267 }
00268
00270 template <typename Self, typename T>
00271 void
00272 MetaElement<AutomataBase<Self>, T>::unset_final(const typename automaton_traits<T>::hstate_t& state)
00273 {
00274 op_set_final(this->structure(),
00275 this->value(),
00276 state,
00277 algebra::zero_as<series_set_elt_value_t>::
00278 of(this->structure().series()));
00279 }
00280
00281 template <typename Self, typename T>
00282 void
00283 MetaElement<AutomataBase<Self>, T>::unset_final(unsigned state)
00284 {
00285 op_set_final(this->structure(),
00286 this->value(),
00287 state,
00288 algebra::zero_as<series_set_elt_value_t>::
00289 of(this->structure().series()));
00290 }
00291
00293 template <typename Self, typename T>
00294 void
00295 MetaElement<AutomataBase<Self>, T>::clear_initial()
00296 {
00297 return op_clear_initial(this->structure(), this->value());
00298 }
00299
00301 template <typename Self, typename T>
00302 void
00303 MetaElement<AutomataBase<Self>, T>::clear_final()
00304 {
00305 return op_clear_final(this->structure(), this->value());
00306 }
00307
00309 template <typename Self, typename T>
00310 typename MetaElement<AutomataBase<Self>, T>::series_set_elt_t
00311 MetaElement<AutomataBase<Self>, T>::get_initial(const typename automaton_traits<T>::hstate_t& state) const
00312 {
00313 return op_get_initial(this->structure(), this->value(), state);
00314 }
00315
00316 template <typename Self, typename T>
00317 typename MetaElement<AutomataBase<Self>, T>::series_set_elt_t
00318 MetaElement<AutomataBase<Self>, T>::get_initial(unsigned state) const
00319 {
00320 return op_get_initial(this->structure(), this->value(), state);
00321 }
00322
00324 template <typename Self, typename T>
00325 typename MetaElement<AutomataBase<Self>, T>::series_set_elt_t
00326 MetaElement<AutomataBase<Self>, T>::get_final(const typename automaton_traits<T>::hstate_t& state) const
00327 {
00328 return op_get_final(this->structure(), this->value(), state);
00329 }
00330
00331 template <typename Self, typename T>
00332 typename MetaElement<AutomataBase<Self>, T>::series_set_elt_t
00333 MetaElement<AutomataBase<Self>, T>::get_final(unsigned state) const
00334 {
00335 return op_get_final(this->structure(), this->value(), state);
00336 }
00337
00339 template <typename Self, typename T>
00340 typename automaton_traits<T>::hstate_t
00341 MetaElement<AutomataBase<Self>, T>::add_state()
00342 {
00343 return op_add_state(this->structure(), this->value());
00344 }
00345
00347 template <typename Self, typename T>
00348 typename automaton_traits<T>::hstate_t
00349 MetaElement<AutomataBase<Self>, T>::get_state(unsigned state) const
00350 {
00351 return op_get_state(this->structure(), this->value(), state);
00352 }
00353
00356 template <typename Self, typename T>
00357 typename automaton_traits<T>::hstate_t
00358 MetaElement<AutomataBase<Self>, T>::choose_state() const
00359 {
00360 return op_choose_state(this->structure(), this->value());
00361 }
00362
00364 template <typename Self, typename T>
00365 typename automaton_traits<T>::htransition_t
00366 MetaElement<AutomataBase<Self>, T>::add_transition(const typename automaton_traits<T>::hstate_t& src,
00367 const typename automaton_traits<T>::hstate_t& dst,
00368 const label_t& label)
00369 {
00370 return op_add_transition(this->structure(), this->value(),
00371 src, dst, label);
00372 }
00373
00374 template <typename Self, typename T>
00375 typename automaton_traits<T>::htransition_t
00376 MetaElement<AutomataBase<Self>, T>::add_transition(unsigned src,
00377 unsigned dst,
00378 const label_t& label)
00379 {
00380 return op_add_transition(this->structure(), this->value(),
00381 src, dst, label);
00382 }
00383
00385 template <typename Self, typename T>
00386 typename automaton_traits<T>::htransition_t
00387 MetaElement<AutomataBase<Self>, T>::
00388 add_weighted_transition(const typename automaton_traits<T>::hstate_t& src,
00389 const typename automaton_traits<T>::hstate_t& dst,
00390 const semiring_elt_t& w,
00391 const monoid_elt_value_t& m)
00392 {
00393 return op_add_weighted_transition(this->structure(), this->value(),
00394 src, dst, w, m);
00395 }
00396
00397 template <typename Self, typename T>
00398 typename automaton_traits<T>::htransition_t
00399 MetaElement<AutomataBase<Self>, T>::
00400 add_weighted_transition(unsigned src,
00401 unsigned dst,
00402 const semiring_elt_t& w,
00403 const monoid_elt_value_t& m)
00404 {
00405 return op_add_weighted_transition(this->structure(), this->value(),
00406 src, dst, w, m);
00407 }
00408
00412 template <typename Self, typename T>
00413 typename automaton_traits<T>::htransition_t
00414 MetaElement<AutomataBase<Self>, T>::add_series_transition(const typename automaton_traits<T>::hstate_t& src,
00415 const typename automaton_traits<T>::hstate_t& dst,
00416 const series_set_elt_t& e)
00417 {
00418 return op_add_series_transition(this->structure(), this->value(),
00419 src, dst, e);
00420 }
00421
00422 template <typename Self, typename T>
00423 typename automaton_traits<T>::htransition_t
00424 MetaElement<AutomataBase<Self>, T>::add_series_transition(unsigned src,
00425 unsigned dst,
00426 const series_set_elt_t& e)
00427 {
00428 return op_add_series_transition(this->structure(), this->value(),
00429 src, dst, e);
00430 }
00431
00433 template <typename Self, typename T>
00434 typename automaton_traits<T>::htransition_t
00435 MetaElement<AutomataBase<Self>, T>::add_spontaneous(const typename automaton_traits<T>::hstate_t& src,
00436 const typename automaton_traits<T>::hstate_t& dst)
00437 {
00438 semiring_elt_t w(this->structure().series().semiring());
00439 w = algebra::identity_as<semiring_elt_value_t>
00440 ::of(this->structure().series().semiring());
00441 return op_add_spontaneous(this->structure(), this->value(), src, dst, w);
00442 }
00443
00444 template <typename Self, typename T>
00445 typename automaton_traits<T>::htransition_t
00446 MetaElement<AutomataBase<Self>, T>::add_spontaneous(unsigned src,
00447 unsigned dst)
00448 {
00449 semiring_elt_t w(this->structure().series().semiring());
00450 w = algebra::identity_as<semiring_elt_value_t>
00451 ::of(this->structure().series().semiring());
00452 return op_add_spontaneous(this->structure(), this->value(), src, dst, w);
00453 }
00454
00455 template <typename Self, typename T>
00456 typename automaton_traits<T>::htransition_t
00457 MetaElement<AutomataBase<Self>, T>::add_spontaneous(const typename automaton_traits<T>::hstate_t& src,
00458 const typename automaton_traits<T>::hstate_t& dst,
00459 const semiring_elt_t& w)
00460 {
00461 return op_add_spontaneous(this->structure(), this->value(), src, dst, w);
00462 }
00463
00464 template <typename Self, typename T>
00465 typename automaton_traits<T>::htransition_t
00466 MetaElement<AutomataBase<Self>, T>::add_spontaneous(unsigned src,
00467 unsigned dst,
00468 const semiring_elt_t& w)
00469 {
00470 return op_add_spontaneous(this->structure(), this->value(), src, dst, w);
00471 }
00472
00474 template <typename Self, typename T>
00475 typename automaton_traits<T>::htransition_t
00476 MetaElement<AutomataBase<Self>, T>::add_letter_transition(const typename automaton_traits<T>::hstate_t& src,
00477 const typename automaton_traits<T>::hstate_t& dst,
00478 const letter_t& l)
00479 {
00480 return op_add_letter_transition(this->structure(), this->value(),
00481 src, dst, l);
00482 }
00483
00484 template <typename Self, typename T>
00485 typename automaton_traits<T>::htransition_t
00486 MetaElement<AutomataBase<Self>, T>::add_letter_transition(unsigned src,
00487 unsigned dst,
00488 const letter_t& l)
00489 {
00490 return op_add_letter_transition(this->structure(), this->value(),
00491 src, dst, l);
00492 }
00493
00496 template <typename Self, typename T>
00497 typename automaton_traits<T>::htransition_t
00498 MetaElement<AutomataBase<Self>, T>::add_letter_transition(const typename automaton_traits<T>::hstate_t& src,
00499 const typename automaton_traits<T>::hstate_t& dst,
00500 const std::string& l)
00501 {
00502 return op_add_letter_transition(this->structure(), this->value(),
00503 src, dst, algebra::letter_traits<letter_t>::
00504 literal_to_letter(l));
00505 }
00506
00507 template <typename Self, typename T>
00508 typename automaton_traits<T>::htransition_t
00509 MetaElement<AutomataBase<Self>, T>::add_letter_transition(unsigned src,
00510 unsigned dst,
00511 const std::string& l)
00512 {
00513 return op_add_letter_transition(this->structure(), this->value(),
00514 src, dst, algebra::letter_traits<letter_t>::
00515 literal_to_letter(l));
00516 }
00517
00519 template <typename Self, typename T>
00520 void
00521 MetaElement<AutomataBase<Self>, T>::update(const typename automaton_traits<T>::htransition_t& e, const label_t& l)
00522 {
00523 op_update(this->structure(), this->value(), e, l);
00524 }
00525
00527 template <typename Self, typename T>
00528 void
00529 MetaElement<AutomataBase<Self>, T>::del_state(const typename automaton_traits<T>::hstate_t& s)
00530 {
00531 return op_del_state(this->structure(), this->value(), s);
00532 }
00533
00534 template <typename Self, typename T>
00535 void
00536 MetaElement<AutomataBase<Self>, T>::del_state(unsigned state)
00537 {
00538 return op_del_state(this->structure(), this->value(), state);
00539 }
00540
00542 template <typename Self, typename T>
00543 void
00544 MetaElement<AutomataBase<Self>, T>::del_transition(const typename automaton_traits<T>::htransition_t& e)
00545 {
00546 return op_del_transition(this->structure(), this->value(), e);
00547 }
00548
00550 template <typename Self, typename T>
00551 bool
00552 MetaElement<AutomataBase<Self>, T>::has_state(const typename automaton_traits<T>::hstate_t& s) const
00553 {
00554 return op_has_state(this->structure(), this->value(), s);
00555 }
00556
00557 template <typename Self, typename T>
00558 bool
00559 MetaElement<AutomataBase<Self>, T>::has_state(unsigned state) const
00560 {
00561 return op_has_state(this->structure(), this->value(), state);
00562 }
00563
00565 template <typename Self, typename T>
00566 bool
00567 MetaElement<AutomataBase<Self>, T>::has_transition(const typename automaton_traits<T>::htransition_t& e) const
00568 {
00569 return op_has_transition(this->structure(), this->value(), e);
00570 }
00571
00573 template <typename Self, typename T>
00574 typename automaton_traits<T>::hstate_t
00575 MetaElement<AutomataBase<Self>, T>::src_of(const typename automaton_traits<T>::htransition_t& e) const
00576 {
00577 return op_src_of(this->structure(), this->value(), e);
00578 }
00579
00581 template <typename Self, typename T>
00582 typename automaton_traits<T>::hstate_t
00583 MetaElement<AutomataBase<Self>, T>::dst_of(const typename automaton_traits<T>::htransition_t& e) const
00584 {
00585 return op_dst_of(this->structure(), this->value(), e);
00586 }
00587
00589 template <typename Self, typename T>
00590 typename automaton_traits<T>::label_t
00591 MetaElement<AutomataBase<Self>, T>::label_of(const typename automaton_traits<T>::htransition_t& e) const
00592 {
00593 return op_label_of(this->structure(), this->value(), e);
00594 }
00595
00597 template <typename Self, typename T>
00598 typename MetaElement<AutomataBase<Self>, T>::series_set_elt_t
00599 MetaElement<AutomataBase<Self>, T>::series_of(const typename automaton_traits<T>::htransition_t& e) const
00600 {
00601 return op_series_of(this->structure(), this->value(), e);
00602 }
00603
00605 template <typename Self, typename T>
00606 typename MetaElement<AutomataBase<Self>, T>::series_set_elt_value_t
00607 MetaElement<AutomataBase<Self>, T>::series_value_of(const typename automaton_traits<T>::htransition_t& e) const
00608 {
00609 return op_series_value_of(this->structure(), this->value(), e);
00610 }
00611
00613 template <typename Self, typename T>
00614 bool
00615 MetaElement<AutomataBase<Self>, T>::is_spontaneous(const typename automaton_traits<T>::htransition_t& e) const
00616 {
00617 return op_is_spontaneous(this->structure(), this->value(), e);
00618 }
00619
00621 template <typename Self, typename T>
00622 typename MetaElement<AutomataBase<Self>, T>::monoid_elt_t
00623 MetaElement<AutomataBase<Self>, T>::word_of(const typename automaton_traits<T>::htransition_t& e) const
00624 {
00625 return op_word_of(this->structure(), this->value(), e);
00626 }
00627
00629 template <typename Self, typename T>
00630 typename MetaElement<AutomataBase<Self>, T>::semiring_elt_t
00631 MetaElement<AutomataBase<Self>, T>::weight_of(const typename automaton_traits<T>::htransition_t& e) const
00632 {
00633 return op_weight_of(this->structure(), this->value(), e);
00634 }
00635
00637 template <typename Self, typename T>
00638 typename MetaElement<AutomataBase<Self>, T>::monoid_elt_value_t
00639 MetaElement<AutomataBase<Self>, T>::word_value_of(const typename automaton_traits<T>::htransition_t& e) const
00640 {
00641 return op_word_value_of(this->structure(), this->value(), e);
00642 }
00643
00647 template <typename Self, typename T>
00648 typename MetaElement<AutomataBase<Self>, T>::letter_t
00649 MetaElement<AutomataBase<Self>, T>::letter_of(const typename automaton_traits<T>::htransition_t& e) const
00650 {
00651 return op_letter_of(this->structure(), this->value(), e);
00652 }
00653
00654
00655
00656
00657
00658 template <typename Self, typename T>
00659 template <typename OutputIterator, typename Kind>
00660 void
00661 MetaElement<AutomataBase<Self>, T>::delta(OutputIterator res,
00662 const typename automaton_traits<T>::hstate_t& src,
00663 delta_kind::kind<Kind> k) const
00664 {
00665 op_delta(this->structure(), this->value(), res, src, k);
00666 }
00667
00668 template <typename Self, typename T>
00669 template <typename OutputIterator, typename Kind>
00670 void
00671 MetaElement<AutomataBase<Self>, T>::delta(OutputIterator res,
00672 unsigned src,
00673 delta_kind::kind<Kind> k) const
00674 {
00675 op_delta(this->structure(), this->value(), res, src, k);
00676 }
00677
00678 template <typename Self, typename T>
00679 template <typename OutputIterator, typename L, typename Kind>
00680 void
00681 MetaElement<AutomataBase<Self>, T>::delta(OutputIterator res,
00682 const typename automaton_traits<T>::hstate_t& src,
00683 const L& query,
00684 delta_kind::kind<Kind> k) const
00685 {
00686 op_delta(this->structure(), this->value(), res, src, query, k);
00687 }
00688
00689 template <typename Self, typename T>
00690 template <typename OutputIterator, typename L, typename Kind>
00691 void
00692 MetaElement<AutomataBase<Self>, T>::delta(OutputIterator res,
00693 unsigned src,
00694 const L& query,
00695 delta_kind::kind<Kind> k) const
00696 {
00697 op_delta(this->structure(), this->value(), res, src, query, k);
00698 }
00699
00700 template <typename Self, typename T>
00701 template <typename OutputIterator, typename L, typename Kind>
00702 void
00703 MetaElement<AutomataBase<Self>, T>::letter_delta(OutputIterator res,
00704 const typename automaton_traits<T>::hstate_t& src,
00705 const L& letter,
00706 delta_kind::kind<Kind> k) const
00707 {
00708 op_letter_delta(this->structure(), this->value(), res, src, letter, k);
00709 }
00710
00711 template <typename Self, typename T>
00712 template <typename OutputIterator, typename L, typename Kind>
00713 void
00714 MetaElement<AutomataBase<Self>, T>::letter_delta(OutputIterator res,
00715 unsigned src,
00716 const L& letter,
00717 delta_kind::kind<Kind> k) const
00718 {
00719 op_letter_delta(this->structure(), this->value(), res, src, letter, k);
00720 }
00721
00722 template <typename Self, typename T>
00723 template <typename OutputIterator, typename Kind>
00724 void
00725 MetaElement<AutomataBase<Self>, T>
00726 ::spontaneous_delta(OutputIterator res,
00727 const typename automaton_traits<T>::hstate_t& src,
00728 delta_kind::kind<Kind> k) const
00729 {
00730 return op_spontaneous_delta(this->structure(), this->value(), res, src, k);
00731 }
00732
00733 template <typename Self, typename T>
00734 template <typename OutputIterator, typename Kind>
00735 void
00736 MetaElement<AutomataBase<Self>, T>
00737 ::spontaneous_delta(OutputIterator res,
00738 unsigned src,
00739 delta_kind::kind<Kind> k) const
00740 {
00741 return op_spontaneous_delta(this->structure(), this->value(), res, src, k);
00742 }
00743
00744
00745
00746
00747
00748 template <typename Self, typename T>
00749 template <typename Container, typename Kind>
00750 void
00751 MetaElement<AutomataBase<Self>, T>::deltac(Container& res, const typename automaton_traits<T>::hstate_t& src,
00752 delta_kind::kind<Kind> k) const
00753 {
00754 op_deltac(this->structure(), this->value(), res, src, k);
00755 }
00756
00757 template <typename Self, typename T>
00758 template <typename Container, typename Kind>
00759 void
00760 MetaElement<AutomataBase<Self>, T>::deltac(Container& res, unsigned src,
00761 delta_kind::kind<Kind> k) const
00762 {
00763 op_deltac(this->structure(), this->value(), res, src, k);
00764 }
00765
00766 template <typename Self, typename T>
00767 template <typename Container, typename L, typename Kind>
00768 void
00769 MetaElement<AutomataBase<Self>, T>::deltac(Container& res,
00770 const typename automaton_traits<T>::hstate_t& src,
00771 const L& query,
00772 delta_kind::kind<Kind> k) const
00773 {
00774 op_deltac(this->structure(), this->value(), res, src, query, k);
00775 }
00776
00777 template <typename Self, typename T>
00778 template <typename Container, typename L, typename Kind>
00779 void
00780 MetaElement<AutomataBase<Self>, T>::deltac(Container& res,
00781 unsigned src,
00782 const L& query,
00783 delta_kind::kind<Kind> k) const
00784 {
00785 op_deltac(this->structure(), this->value(), res, src, query, k);
00786 }
00787
00788 template <typename Self, typename T>
00789 template <typename Container, typename L, typename Kind>
00790 void
00791 MetaElement<AutomataBase<Self>, T>::letter_deltac(Container& res,
00792 const typename automaton_traits<T>::hstate_t& src,
00793 const L& letter,
00794 delta_kind::kind<Kind> k) const
00795 {
00796 op_letter_deltac(this->structure(), this->value(), res, src, letter, k);
00797 }
00798
00799 template <typename Self, typename T>
00800 template <typename Container, typename L, typename Kind>
00801 void
00802 MetaElement<AutomataBase<Self>, T>::letter_deltac(Container& res,
00803 unsigned src,
00804 const L& letter,
00805 delta_kind::kind<Kind> k) const
00806 {
00807 op_letter_deltac(this->structure(), this->value(), res, src, letter, k);
00808 }
00809
00810 template <typename Self, typename T>
00811 template <typename Container, typename Kind>
00812 void
00813 MetaElement<AutomataBase<Self>, T>
00814 ::spontaneous_deltac(Container& res,
00815 const typename automaton_traits<T>::hstate_t& src,
00816 delta_kind::kind<Kind> k) const
00817 {
00818 op_spontaneous_deltac(this->structure(), this->value(), res, src, k);
00819 }
00820
00821 template <typename Self, typename T>
00822 template <typename Container, typename Kind>
00823 void
00824 MetaElement<AutomataBase<Self>, T>
00825 ::spontaneous_deltac(Container& res,
00826 unsigned src,
00827 delta_kind::kind<Kind> k) const
00828 {
00829 op_spontaneous_deltac(this->structure(), this->value(), res, src, k);
00830 }
00831
00832
00833
00834
00835
00836 template <typename Self, typename T>
00837 template <typename Functor, typename Kind>
00838 void
00839 MetaElement<AutomataBase<Self>, T>::deltaf(Functor& fun, const typename automaton_traits<T>::hstate_t& src,
00840 delta_kind::kind<Kind> k) const
00841 {
00842 op_deltaf(this->structure(), this->value(), fun, src, k);
00843 }
00844
00845 template <typename Self, typename T>
00846 template <typename Functor, typename Kind>
00847 void
00848 MetaElement<AutomataBase<Self>, T>::deltaf(Functor& fun, unsigned src,
00849 delta_kind::kind<Kind> k) const
00850 {
00851 op_deltaf(this->structure(), this->value(), fun, src, k);
00852 }
00853
00854 template <typename Self, typename T>
00855 template <typename Functor, typename L, typename Kind>
00856 void
00857 MetaElement<AutomataBase<Self>, T>::deltaf(Functor& fun,
00858 const typename automaton_traits<T>::hstate_t& src,
00859 const L& query,
00860 delta_kind::kind<Kind> k) const
00861 {
00862 op_deltaf(this->structure(), this->value(), fun, src, query, k);
00863 }
00864
00865 template <typename Self, typename T>
00866 template <typename Functor, typename L, typename Kind>
00867 void
00868 MetaElement<AutomataBase<Self>, T>::deltaf(Functor& fun,
00869 unsigned src,
00870 const L& query,
00871 delta_kind::kind<Kind> k) const
00872 {
00873 op_deltaf(this->structure(), this->value(), fun, src, query, k);
00874 }
00875
00876 template <typename Self, typename T>
00877 template <typename Functor, typename L, typename Kind>
00878 void
00879 MetaElement<AutomataBase<Self>, T>::letter_deltaf(Functor& fun,
00880 const typename automaton_traits<T>::hstate_t& src,
00881 const L& letter,
00882 delta_kind::kind<Kind> k) const
00883 {
00884 op_letter_deltaf(this->structure(), this->value(), fun, src, letter, k);
00885 }
00886
00887 template <typename Self, typename T>
00888 template <typename Functor, typename L, typename Kind>
00889 void
00890 MetaElement<AutomataBase<Self>, T>::letter_deltaf(Functor& fun,
00891 unsigned src,
00892 const L& letter,
00893 delta_kind::kind<Kind> k) const
00894 {
00895 op_letter_deltaf(this->structure(), this->value(), fun, src, letter, k);
00896 }
00897
00898 template <typename Self, typename T>
00899 template <typename Functor, typename Kind>
00900 void
00901 MetaElement<AutomataBase<Self>, T>
00902 ::spontaneous_deltaf(Functor& fun,
00903 const typename automaton_traits<T>::hstate_t& src,
00904 delta_kind::kind<Kind> k) const
00905 {
00906 op_spontaneous_deltaf(this->structure(), this->value(), fun, src, k);
00907 }
00908
00909 template <typename Self, typename T>
00910 template <typename Functor, typename Kind>
00911 void
00912 MetaElement<AutomataBase<Self>, T>
00913 ::spontaneous_deltaf(Functor& fun,
00914 unsigned src,
00915 delta_kind::kind<Kind> k) const
00916 {
00917 op_spontaneous_deltaf(this->structure(), this->value(), fun, src, k);
00918 }
00919
00920
00921
00922
00923
00924 template <typename Self, typename T>
00925 template <typename OutputIterator, typename Kind>
00926 void
00927 MetaElement<AutomataBase<Self>, T>::rdelta(OutputIterator res,
00928 const typename automaton_traits<T>::hstate_t& src,
00929 delta_kind::kind<Kind> k) const
00930 {
00931 op_rdelta(this->structure(), this->value(), res, src, k);
00932 }
00933
00934 template <typename Self, typename T>
00935 template <typename OutputIterator, typename Kind>
00936 void
00937 MetaElement<AutomataBase<Self>, T>::rdelta(OutputIterator res,
00938 unsigned src,
00939 delta_kind::kind<Kind> k) const
00940 {
00941 op_rdelta(this->structure(), this->value(), res, src, k);
00942 }
00943
00944 template <typename Self, typename T>
00945 template <typename OutputIterator, typename L, typename Kind>
00946 void
00947 MetaElement<AutomataBase<Self>, T>::rdelta(OutputIterator res,
00948 const typename automaton_traits<T>::hstate_t& src,
00949 const L& query,
00950 delta_kind::kind<Kind> k) const
00951 {
00952 op_rdelta(this->structure(), this->value(), res, src, query, k);
00953 }
00954
00955 template <typename Self, typename T>
00956 template <typename OutputIterator, typename L, typename Kind>
00957 void
00958 MetaElement<AutomataBase<Self>, T>::rdelta(OutputIterator res,
00959 unsigned src,
00960 const L& query,
00961 delta_kind::kind<Kind> k) const
00962 {
00963 op_rdelta(this->structure(), this->value(), res, src, query, k);
00964 }
00965
00966 template <typename Self, typename T>
00967 template <typename OutputIterator, typename L, typename Kind>
00968 void
00969 MetaElement<AutomataBase<Self>, T>::letter_rdelta(OutputIterator res,
00970 const typename automaton_traits<T>::hstate_t& src,
00971 const L& letter,
00972 delta_kind::kind<Kind> k) const
00973 {
00974 op_letter_rdelta(this->structure(), this->value(), res, src, letter, k);
00975 }
00976
00977 template <typename Self, typename T>
00978 template <typename OutputIterator, typename L, typename Kind>
00979 void
00980 MetaElement<AutomataBase<Self>, T>::letter_rdelta(OutputIterator res,
00981 unsigned src,
00982 const L& letter,
00983 delta_kind::kind<Kind> k) const
00984 {
00985 op_letter_rdelta(this->structure(), this->value(), res, src, letter, k);
00986 }
00987
00988 template <typename Self, typename T>
00989 template <typename OutputIterator, typename Kind>
00990 void
00991 MetaElement<AutomataBase<Self>, T>
00992 ::spontaneous_rdelta(OutputIterator res,
00993 const typename automaton_traits<T>::hstate_t& src,
00994 delta_kind::kind<Kind> k) const
00995 {
00996 return op_spontaneous_rdelta(this->structure(), this->value(), res, src, k);
00997 }
00998
00999 template <typename Self, typename T>
01000 template <typename OutputIterator, typename Kind>
01001 void
01002 MetaElement<AutomataBase<Self>, T>
01003 ::spontaneous_rdelta(OutputIterator res,
01004 unsigned src,
01005 delta_kind::kind<Kind> k) const
01006 {
01007 return op_spontaneous_rdelta(this->structure(), this->value(), res, src, k);
01008 }
01009
01010
01011
01012
01013
01014 template <typename Self, typename T>
01015 template <typename Container, typename Kind>
01016 void
01017 MetaElement<AutomataBase<Self>, T>::rdeltac(Container& res, const typename automaton_traits<T>::hstate_t& src,
01018 delta_kind::kind<Kind> k) const
01019 {
01020 op_rdeltac(this->structure(), this->value(), res, src, k);
01021 }
01022
01023 template <typename Self, typename T>
01024 template <typename Container, typename Kind>
01025 void
01026 MetaElement<AutomataBase<Self>, T>::rdeltac(Container& res, unsigned src,
01027 delta_kind::kind<Kind> k) const
01028 {
01029 op_rdeltac(this->structure(), this->value(), res, src, k);
01030 }
01031
01032 template <typename Self, typename T>
01033 template <typename Container, typename L, typename Kind>
01034 void
01035 MetaElement<AutomataBase<Self>, T>::rdeltac(Container& res,
01036 const typename automaton_traits<T>::hstate_t& src,
01037 const L& query,
01038 delta_kind::kind<Kind> k) const
01039 {
01040 op_rdeltac(this->structure(), this->value(), res, src, query, k);
01041 }
01042
01043 template <typename Self, typename T>
01044 template <typename Container, typename L, typename Kind>
01045 void
01046 MetaElement<AutomataBase<Self>, T>::rdeltac(Container& res,
01047 unsigned src,
01048 const L& query,
01049 delta_kind::kind<Kind> k) const
01050 {
01051 op_rdeltac(this->structure(), this->value(), res, src, query, k);
01052 }
01053
01054 template <typename Self, typename T>
01055 template <typename Container, typename L, typename Kind>
01056 void
01057 MetaElement<AutomataBase<Self>, T>::letter_rdeltac(Container& res,
01058 const typename automaton_traits<T>::hstate_t& src,
01059 const L& letter,
01060 delta_kind::kind<Kind> k) const
01061 {
01062 op_letter_rdeltac(this->structure(), this->value(), res, src, letter, k);
01063 }
01064
01065 template <typename Self, typename T>
01066 template <typename Container, typename L, typename Kind>
01067 void
01068 MetaElement<AutomataBase<Self>, T>::letter_rdeltac(Container& res,
01069 unsigned src,
01070 const L& letter,
01071 delta_kind::kind<Kind> k) const
01072 {
01073 op_letter_rdeltac(this->structure(), this->value(), res, src, letter, k);
01074 }
01075
01076 template <typename Self, typename T>
01077 template <typename Container, typename Kind>
01078 void
01079 MetaElement<AutomataBase<Self>, T>
01080 ::spontaneous_rdeltac(Container& res,
01081 const typename automaton_traits<T>::hstate_t& src,
01082 delta_kind::kind<Kind> k) const
01083 {
01084 op_spontaneous_rdeltac(this->structure(), this->value(), res, src, k);
01085 }
01086
01087 template <typename Self, typename T>
01088 template <typename Container, typename Kind>
01089 void
01090 MetaElement<AutomataBase<Self>, T>
01091 ::spontaneous_rdeltac(Container& res,
01092 unsigned src,
01093 delta_kind::kind<Kind> k) const
01094 {
01095 op_spontaneous_rdeltac(this->structure(), this->value(), res, src, k);
01096 }
01097
01098
01099
01100
01101
01102 template <typename Self, typename T>
01103 template <typename Functor, typename Kind>
01104 void
01105 MetaElement<AutomataBase<Self>, T>::rdeltaf(Functor& fun, const typename automaton_traits<T>::hstate_t& src,
01106 delta_kind::kind<Kind> k) const
01107 {
01108 op_rdeltaf(this->structure(), this->value(), fun, src, k);
01109 }
01110
01111 template <typename Self, typename T>
01112 template <typename Functor, typename Kind>
01113 void
01114 MetaElement<AutomataBase<Self>, T>::rdeltaf(Functor& fun, unsigned src,
01115 delta_kind::kind<Kind> k) const
01116 {
01117 op_rdeltaf(this->structure(), this->value(), fun, src, k);
01118 }
01119
01120 template <typename Self, typename T>
01121 template <typename Functor, typename L, typename Kind>
01122 void
01123 MetaElement<AutomataBase<Self>, T>::rdeltaf(Functor& fun,
01124 const typename automaton_traits<T>::hstate_t& src,
01125 const L& query,
01126 delta_kind::kind<Kind> k) const
01127 {
01128 op_rdeltaf(this->structure(), this->value(), fun, src, query, k);
01129 }
01130
01131 template <typename Self, typename T>
01132 template <typename Functor, typename L, typename Kind>
01133 void
01134 MetaElement<AutomataBase<Self>, T>::rdeltaf(Functor& fun,
01135 unsigned src,
01136 const L& query,
01137 delta_kind::kind<Kind> k) const
01138 {
01139 op_rdeltaf(this->structure(), this->value(), fun, src, query, k);
01140 }
01141
01142 template <typename Self, typename T>
01143 template <typename Functor, typename L, typename Kind>
01144 void
01145 MetaElement<AutomataBase<Self>, T>::letter_rdeltaf(Functor& fun,
01146 const typename automaton_traits<T>::hstate_t& src,
01147 const L& letter,
01148 delta_kind::kind<Kind> k) const
01149 {
01150 op_letter_rdeltaf(this->structure(), this->value(), fun, src, letter, k);
01151 }
01152
01153 template <typename Self, typename T>
01154 template <typename Functor, typename L, typename Kind>
01155 void
01156 MetaElement<AutomataBase<Self>, T>::letter_rdeltaf(Functor& fun,
01157 unsigned src,
01158 const L& letter,
01159 delta_kind::kind<Kind> k) const
01160 {
01161 op_letter_rdeltaf(this->structure(), this->value(), fun, src, letter, k);
01162 }
01163
01164 template <typename Self, typename T>
01165 template <typename Functor, typename Kind>
01166 void
01167 MetaElement<AutomataBase<Self>, T>
01168 ::spontaneous_rdeltaf(Functor& fun,
01169 const typename automaton_traits<T>::hstate_t& src,
01170 delta_kind::kind<Kind> k) const
01171 {
01172 op_spontaneous_rdeltaf(this->structure(), this->value(), fun, src, k);
01173 }
01174
01175 template <typename Self, typename T>
01176 template <typename Functor, typename Kind>
01177 void
01178 MetaElement<AutomataBase<Self>, T>
01179 ::spontaneous_rdeltaf(Functor& fun,
01180 unsigned src,
01181 delta_kind::kind<Kind> k) const
01182 {
01183 op_spontaneous_rdeltaf(this->structure(), this->value(), fun, src, k);
01184 }
01185
01186
01187 template<typename S, typename St, typename T>
01188 St& op_rout(const AutomataBase<S>& s, St& st, const T& v)
01189 {
01190 Element<S, T> r(s.self(), v);
01191 st << "{ "
01192 << r.states().size() << " states, "
01193 << r.transitions().size() << " transitions, "
01194 << "#I = " << r.initial().size() << ", "
01195 << "#T = " << r.final().size()
01196 << " }";
01197 return st;
01198 }
01199
01200
01201
01202
01203
01204 template <typename Auto_>
01205 typename generalized_traits<Auto_>::automaton_t
01206 generalized(const Auto_& from)
01207 {
01208 typename generalized_traits<Auto_>::automaton_t to(from.structure());
01209 auto_copy(to, from);
01210 return to;
01211 }
01212
01213 }
01214
01215 #endif // ! VCSN_AUTOMATA_CONCEPT_AUTOMATA_BASE_HXX