00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_AUTOMATA_CONCEPT_AUTOMATA_BASE_HH
00018 # define VCSN_AUTOMATA_CONCEPT_AUTOMATA_BASE_HH
00019
00020 # include <iterator>
00021 # include <vaucanson/design_pattern/design_pattern.hh>
00022 # include <vaucanson/automata/concept/handlers.hh>
00023 # include <vaucanson/automata/concept/delta_kind.hh>
00024 # include <vaucanson/algebra/concept/series_base.hh>
00025
00026 namespace vcsn {
00027
00031
00032
00033
00035
00039 template <typename Self>
00040 struct AutomataBase
00041 : Structure<Self>
00042 {
00043 public:
00045 typedef typename virtual_types<Self>::series_set_t series_set_t;
00046
00047 protected:
00049 AutomataBase();
00050
00052 AutomataBase(const AutomataBase& other);
00053
00054 public:
00056 const series_set_t& series() const;
00057 };
00058
00059
00060 template <typename T>
00061 struct automaton_traits
00062 {
00063 typedef undefined_type label_t;
00064 typedef undefined_type series_set_elt_value_t;
00065 typedef undefined_type word_value_t;
00066 typedef undefined_type semiring_elt_value_t;
00067 typedef undefined_type letter_t;
00068 typedef undefined_type tag_t;
00069 typedef undefined_type states_t;
00070 typedef undefined_type state_iterator;
00071 typedef undefined_type transitions_t;
00072 typedef undefined_type transition_iterator;
00073 typedef undefined_type initial_iterator;
00074 typedef undefined_type initial_t;
00075 typedef undefined_type initial_support_t;
00076 typedef undefined_type final_iterator;
00077 typedef undefined_type final_t;
00078 typedef undefined_type final_support_t;
00079 typedef undefined_type geometry_t;
00080 typedef undefined_type hstate_t;
00081 typedef undefined_type htransition_t;
00082 typedef undefined_type delta_state_iterator;
00083 typedef undefined_type delta_transition_iterator;
00084 typedef undefined_type rdelta_state_iterator;
00085 typedef undefined_type rdelta_transition_iterator;
00086 };
00087
00088 # define VCSN_MAKE_AUTOMATON_TRAITS(Type) \
00089 template <typename Kind, \
00090 typename WordValue, \
00091 typename WeightValue, \
00092 typename SeriesValue, \
00093 typename Letter, \
00094 typename Tag, \
00095 typename GeometryCoords> \
00096 struct automaton_traits<Type<Kind, WordValue, WeightValue, SeriesValue, \
00097 Letter, Tag, GeometryCoords> > \
00098 { \
00099 typedef Type<Kind, WordValue, WeightValue, SeriesValue, \
00100 Letter, Tag, GeometryCoords> graph_t; \
00101 typedef typename graph_t::semiring_elt_value_t semiring_elt_value_t; \
00102 typedef typename graph_t::monoid_elt_value_t monoid_elt_value_t; \
00103 typedef typename graph_t::word_value_t word_value_t; \
00104 typedef typename graph_t::series_set_elt_value_t series_set_elt_value_t; \
00105 typedef typename graph_t::letter_t letter_t; \
00106 typedef typename graph_t::tag_t tag_t; \
00107 typedef typename graph_t::geometry_t geometry_t; \
00108 typedef typename graph_t::label_t label_t; \
00109 typedef typename graph_t::states_t states_t; \
00110 typedef typename states_t::iterator state_iterator; \
00111 typedef typename graph_t::hstate_t hstate_t; \
00112 typedef typename graph_t::edges_t transitions_t; \
00113 typedef typename transitions_t::iterator transition_iterator; \
00114 typedef typename graph_t::htransition_t htransition_t; \
00115 typedef typename graph_t::initial_t initial_t; \
00116 typedef typename graph_t::initial_support_t initial_support_t; \
00117 typedef typename initial_support_t::iterator initial_iterator; \
00118 typedef typename graph_t::final_t final_t; \
00119 typedef typename graph_t::final_support_t final_support_t; \
00120 typedef typename final_support_t::iterator final_iterator; \
00121 typedef typename graph_t::delta_state_iterator delta_state_iterator; \
00122 typedef typename graph_t::delta_transition_iterator delta_transition_iterator; \
00123 typedef typename graph_t::rdelta_state_iterator rdelta_state_iterator; \
00124 typedef typename graph_t::rdelta_transition_iterator rdelta_transition_iterator; \
00125 }
00126
00127
00128 template <typename Auto>
00129 struct generalized_traits
00130 {
00131 typedef undefined_type automaton_t;
00132 };
00133
00134 # define VCSN_MAKE_GENERALIZED_AUTOMATON_TRAITS(Type) \
00135 template <typename Struct, \
00136 typename Kind, \
00137 typename WordValue, \
00138 typename WeightValue, \
00139 typename SeriesValue, \
00140 typename Letter, \
00141 typename Tag, \
00142 typename GeometryCoords> \
00143 struct generalized_traits<Element<Struct, Type<Kind, WordValue, \
00144 WeightValue, SeriesValue, Letter, \
00145 Tag, GeometryCoords> > > \
00146 { \
00147 typedef Element<Struct, Type<Kind, WordValue, WeightValue, SeriesValue, \
00148 Letter, Tag, GeometryCoords> > Auto_; \
00149 typedef typename Auto_::series_set_t series_set_t; \
00150 typedef typename series_set_t::monoid_t monoid_t; \
00151 typedef typename Auto_::series_set_elt_t series_set_elt_t; \
00152 typedef typename series_set_elt_t::monoid_elt_t monoid_elt_t; \
00153 typedef typename monoid_elt_t::value_t monoid_elt_value_t; \
00154 typedef typename series_set_elt_t::semiring_elt_t semiring_elt_t; \
00155 typedef typename semiring_elt_t::value_t semiring_elt_value_t; \
00156 typedef typename Auto_::value_t::geometry_t geometry_t; \
00157 typedef vcsn::Element<vcsn::Automata<series_set_t>, \
00158 Type<labels_are_series, \
00159 monoid_elt_value_t, \
00160 semiring_elt_value_t, \
00161 rat::exp<monoid_elt_value_t, semiring_elt_value_t>, \
00162 typename monoid_t::letter_t, \
00163 NoTag, \
00164 typename geometry_t::coords_t> \
00165 > automaton_t; \
00166 typedef typename automaton_t::hstate_t hstate_t; \
00167 typedef typename automaton_t::htransition_t htransition_t; \
00168 }
00169
00170
00171
00172
00173
00174
00175
00176 template <typename Struct, typename Ratexp>
00177 struct standard_of_traits
00178 {
00179 typedef undefined_type automaton_t;
00180 };
00181
00182 # define VCSN_MAKE_STANDARD_OF_TRAITS(Type) \
00183 template <typename W, \
00184 typename M, \
00185 typename Tm, \
00186 typename Tw> \
00187 struct standard_of_traits<algebra::Series<W, M>, rat::exp<Tm, Tw> > \
00188 { \
00189 typedef typename algebra::Series<W, M> series_set_t; \
00190 typedef typename algebra::polynom<Tm, Tw> series_set_elt_value_t; \
00191 typedef typename Type<labels_are_series, Tm, Tw, \
00192 series_set_elt_value_t, Tm, \
00193 NoTag, NoTag> automaton_impl_t; \
00194 typedef Element<Automata<series_set_t>, \
00195 automaton_impl_t> automaton_t; \
00196 }
00197
00198
00199
00200
00201
00202 template <class S>
00203 struct virtual_types<AutomataBase<S> >
00204 : virtual_types<Structure<S> >
00205 { };
00206
00207
00208
00209
00210 template <class S>
00211 struct dynamic_traits<AutomataBase<S> >
00212 : dynamic_traits<Structure<S> >
00213 { };
00214
00215
00216
00217
00219
00232
00233 template <typename Self, typename T>
00234 struct MetaElement<AutomataBase<Self>, T>
00235 : MetaElement<Structure<Self>, T>
00236 {
00238 typedef MetaElement<AutomataBase<Self>, T> self_t;
00239
00241 typedef typename AutomataBase<Self>::series_set_t series_set_t;
00242
00244 typedef typename automaton_traits<T>::series_set_elt_value_t
00245 series_set_elt_value_t;
00246
00248 typedef Element<series_set_t, series_set_elt_value_t> series_set_elt_t;
00249
00251 typedef typename series_set_t::monoid_t monoid_t;
00252
00254 typedef typename series_set_elt_t::monoid_elt_t monoid_elt_t;
00255
00257 typedef typename monoid_elt_t::value_t monoid_elt_value_t;
00258
00260 typedef typename monoid_t::letter_t letter_t;
00261
00263 typedef typename series_set_t::semiring_t semiring_t;
00264
00266 typedef typename series_set_elt_t::semiring_elt_t semiring_elt_t;
00267
00269 typedef typename series_set_elt_t::semiring_elt_value_t
00270 semiring_elt_value_t;
00271
00273 typedef typename automaton_traits<T>::tag_t tag_t;
00274
00276 typedef typename automaton_traits<T>::label_t label_t;
00277
00279 typedef typename automaton_traits<T>::states_t states_t;
00280
00282 typedef typename automaton_traits<T>::state_iterator state_iterator;
00283
00285 typedef typename automaton_traits<T>::transitions_t transitions_t;
00286
00288 typedef typename automaton_traits<T>::transition_iterator transition_iterator;
00289
00291 typedef typename automaton_traits<T>::initial_support_t initial_support_t;
00292
00294 typedef typename automaton_traits<T>::initial_iterator initial_iterator;
00295
00297 typedef typename automaton_traits<T>::final_support_t final_support_t;
00298
00300 typedef typename automaton_traits<T>::final_iterator final_iterator;
00301
00303 typedef typename automaton_traits<T>::geometry_t geometry_t;
00304
00306 typedef typename automaton_traits<T>::geometry_t::coords_t geometry_coords_t;
00307
00309 typedef typename automaton_traits<T>::hstate_t hstate_t;
00310 typedef typename automaton_traits<T>::htransition_t htransition_t;
00311
00313 typedef typename automaton_traits<T>::delta_state_iterator delta_state_iterator;
00314 typedef typename automaton_traits<T>::delta_transition_iterator delta_transition_iterator;
00315 typedef typename automaton_traits<T>::rdelta_state_iterator rdelta_state_iterator;
00316 typedef typename automaton_traits<T>::rdelta_transition_iterator rdelta_transition_iterator;
00317
00319 const series_set_t& series() const;
00320
00322 tag_t& tag();
00323
00325 const tag_t& tag() const;
00326
00328 geometry_t& geometry();
00329
00331 const geometry_t& geometry() const;
00332
00334 bool exists() const;
00335
00337 states_t states() const;
00338
00340 transitions_t transitions() const;
00341
00343 initial_support_t initial() const;
00344
00346 final_support_t final() const;
00347
00350 bool is_initial(const hstate_t& state) const;
00351 bool is_initial(unsigned state) const;
00352
00354 bool is_final(const hstate_t& state) const;
00355 bool is_final(unsigned state) const;
00356
00358 void set_initial(const hstate_t& state);
00359 void set_initial(unsigned state);
00360
00362 void set_initial(const hstate_t& state, const series_set_elt_t& m);
00363 void set_initial(unsigned state, const series_set_elt_t& m);
00364
00366 void set_final(const hstate_t& state);
00367 void set_final(unsigned state);
00368
00370 void set_final(const hstate_t& state, const series_set_elt_t& m);
00371 void set_final(unsigned state, const series_set_elt_t& m);
00372
00374 void unset_initial(const hstate_t& state);
00375 void unset_initial(unsigned state);
00376
00378 void unset_final(const hstate_t& state);
00379 void unset_final(unsigned state);
00380
00382 void clear_initial();
00383
00385 void clear_final();
00386
00388 Element<series_set_t, series_set_elt_value_t>
00389 get_initial(const hstate_t& state) const;
00390 Element<series_set_t, series_set_elt_value_t>
00391 get_initial(unsigned state) const;
00392
00394 Element<series_set_t, series_set_elt_value_t>
00395 get_final(const hstate_t& state) const;
00396 Element<series_set_t, series_set_elt_value_t>
00397 get_final(unsigned state) const;
00398
00400 hstate_t add_state();
00401
00403 hstate_t get_state(unsigned state) const;
00404
00407 hstate_t choose_state() const;
00408
00410 htransition_t add_transition(const hstate_t& src, const hstate_t& dst,
00411 const label_t& label);
00412 htransition_t add_transition(unsigned src, unsigned dst,
00413 const label_t& label);
00414
00417 htransition_t add_weighted_transition(const hstate_t& src, const hstate_t& dst,
00418 const semiring_elt_t& w,
00419 const monoid_elt_value_t& m);
00420 htransition_t add_weighted_transition(unsigned src, unsigned dst,
00421 const semiring_elt_t& w,
00422 const monoid_elt_value_t& m);
00423
00425
00428 htransition_t add_series_transition(const hstate_t& src, const hstate_t& dst,
00429 const series_set_elt_t& e);
00430 htransition_t add_series_transition(unsigned src, unsigned dst,
00431 const series_set_elt_t& e);
00432
00434 htransition_t add_spontaneous(const hstate_t& src, const hstate_t& dst,
00435 const semiring_elt_t& w);
00436
00437 htransition_t add_spontaneous(const hstate_t& src, const hstate_t& dst);
00438
00439 htransition_t add_spontaneous(unsigned src, unsigned dst,
00440 const semiring_elt_t& w);
00441
00442 htransition_t add_spontaneous(unsigned src, unsigned dst);
00443
00445 htransition_t add_letter_transition(const hstate_t& src, const hstate_t& dst,
00446 const letter_t& l);
00447 htransition_t add_letter_transition(unsigned src, unsigned dst,
00448 const letter_t& l);
00449
00452 htransition_t add_letter_transition(const hstate_t& src, const hstate_t& dst,
00453 const std::string& l);
00454 htransition_t add_letter_transition(unsigned src, unsigned dst,
00455 const std::string& l);
00456
00458 void update(const htransition_t& e, const label_t& l);
00459
00461 void del_state(const hstate_t& state);
00462 void del_state(unsigned state);
00463
00465 void del_transition(const htransition_t& e);
00466
00468 bool has_state(const hstate_t& state) const;
00469 bool has_state(unsigned state) const;
00470
00472 bool has_transition(const htransition_t& e) const;
00473
00475 hstate_t src_of(const htransition_t& e) const;
00476
00478 hstate_t dst_of(const htransition_t& e) const;
00479
00481 typename automaton_traits<T>::label_t label_of(const htransition_t& e) const;
00482
00484 series_set_elt_t series_of(const htransition_t& e) const;
00485
00487 series_set_elt_value_t series_value_of(const htransition_t& e) const;
00488
00490 bool is_spontaneous(const htransition_t& e) const;
00491
00493 monoid_elt_t word_of(const htransition_t& e) const;
00494
00496 semiring_elt_t weight_of(const htransition_t& e) const;
00497
00499 monoid_elt_value_t word_value_of(const htransition_t& e) const;
00500
00502
00505 letter_t letter_of(const htransition_t& e) const;
00506
00507
00508
00509
00510
00513 template <typename OutputIterator, typename Kind>
00514 void delta(OutputIterator res,
00515 const hstate_t& src,
00516 delta_kind::kind<Kind> k) const;
00517 template <typename OutputIterator, typename Kind>
00518 void delta(OutputIterator res,
00519 unsigned src,
00520 delta_kind::kind<Kind> k) const;
00521
00522
00523
00526 template <typename OutputIterator, typename L, typename Kind>
00527 void delta(OutputIterator res,
00528 const hstate_t& src,
00529 const L& query,
00530 delta_kind::kind<Kind> k) const;
00531 template <typename OutputIterator, typename L, typename Kind>
00532 void delta(OutputIterator res,
00533 unsigned src,
00534 const L& query,
00535 delta_kind::kind<Kind> k) const;
00536
00539 template <typename OutputIterator, typename L, typename Kind>
00540 void letter_delta(OutputIterator res,
00541 const hstate_t& src,
00542 const L& letter,
00543 delta_kind::kind<Kind> k) const;
00544 template <typename OutputIterator, typename L, typename Kind>
00545 void letter_delta(OutputIterator res,
00546 unsigned src,
00547 const L& letter,
00548 delta_kind::kind<Kind> k) const;
00549
00552 template <typename OutputIterator, typename Kind>
00553 void spontaneous_delta(OutputIterator res,
00554 const hstate_t& src,
00555 delta_kind::kind<Kind> k) const;
00556 template <typename OutputIterator, typename Kind>
00557 void spontaneous_delta(OutputIterator res,
00558 unsigned src,
00559 delta_kind::kind<Kind> k) const;
00560
00561
00562
00563
00564
00567 template <typename Container, typename Kind>
00568 void deltac(Container& res, const hstate_t& src, delta_kind::kind<Kind> k) const;
00569 template <typename Container, typename Kind>
00570 void deltac(Container& res, unsigned src, delta_kind::kind<Kind> k) const;
00571
00575 template <typename Container, typename L, typename Kind>
00576 void deltac(Container& res,
00577 const hstate_t& src,
00578 const L& query,
00579 delta_kind::kind<Kind> k) const;
00580 template <typename Container, typename L, typename Kind>
00581 void deltac(Container& res,
00582 unsigned src,
00583 const L& query,
00584 delta_kind::kind<Kind> k) const;
00585
00588 template <typename Container, typename L, typename Kind>
00589 void letter_deltac(Container& res,
00590 const hstate_t& src,
00591 const L& letter,
00592 delta_kind::kind<Kind> k) const;
00593 template <typename Container, typename L, typename Kind>
00594 void letter_deltac(Container& res,
00595 unsigned src,
00596 const L& letter,
00597 delta_kind::kind<Kind> k) const;
00598
00601 template <typename Container, typename Kind>
00602 void spontaneous_deltac(Container& res,
00603 const hstate_t& src,
00604 delta_kind::kind<Kind> k) const;
00605 template <typename Container, typename Kind>
00606 void spontaneous_deltac(Container& res,
00607 unsigned src,
00608 delta_kind::kind<Kind> k) const;
00609
00610
00611
00612
00613
00614
00618 template <typename Functor, typename Kind>
00619 void deltaf(Functor& fun, const hstate_t& src, delta_kind::kind<Kind> k) const;
00620 template <typename Functor, typename Kind>
00621 void deltaf(Functor& fun, unsigned src, delta_kind::kind<Kind> k) const;
00622
00626 template <typename Functor, typename L, typename Kind>
00627 void deltaf(Functor& fun,
00628 const hstate_t& src,
00629 const L& query,
00630 delta_kind::kind<Kind> k) const;
00631 template <typename Functor, typename L, typename Kind>
00632 void deltaf(Functor& fun,
00633 unsigned src,
00634 const L& query,
00635 delta_kind::kind<Kind> k) const;
00636
00641 template <typename Functor, typename L, typename Kind>
00642 void letter_deltaf(Functor& fun,
00643 const hstate_t& src,
00644 const L& letter,
00645 delta_kind::kind<Kind> k) const;
00646 template <typename Functor, typename L, typename Kind>
00647 void letter_deltaf(Functor& fun,
00648 unsigned src,
00649 const L& letter,
00650 delta_kind::kind<Kind> k) const;
00651
00656 template <typename Functor, typename Kind>
00657 void spontaneous_deltaf(Functor& fun,
00658 const hstate_t& src,
00659 delta_kind::kind<Kind> k) const;
00660 template <typename Functor, typename Kind>
00661 void spontaneous_deltaf(Functor& fun,
00662 unsigned src,
00663 delta_kind::kind<Kind> k) const;
00664
00665
00666
00667
00668
00669
00672 template <typename OutputIterator, typename Kind>
00673 void rdelta(OutputIterator res,
00674 const hstate_t& src,
00675 delta_kind::kind<Kind> k) const;
00676 template <typename OutputIterator, typename Kind>
00677 void rdelta(OutputIterator res,
00678 unsigned src,
00679 delta_kind::kind<Kind> k) const;
00680
00683 template <typename OutputIterator, typename L, typename Kind>
00684 void rdelta(OutputIterator res,
00685 const hstate_t& src,
00686 const L& query,
00687 delta_kind::kind<Kind> k) const;
00688 template <typename OutputIterator, typename L, typename Kind>
00689 void rdelta(OutputIterator res,
00690 unsigned src,
00691 const L& query,
00692 delta_kind::kind<Kind> k) const;
00693
00696 template <typename OutputIterator, typename L, typename Kind>
00697 void letter_rdelta(OutputIterator res,
00698 const hstate_t& src,
00699 const L& letter,
00700 delta_kind::kind<Kind> k) const;
00701 template <typename OutputIterator, typename L, typename Kind>
00702 void letter_rdelta(OutputIterator res,
00703 unsigned src,
00704 const L& letter,
00705 delta_kind::kind<Kind> k) const;
00706
00709 template <typename OutputIterator, typename Kind>
00710 void spontaneous_rdelta(OutputIterator res,
00711 const hstate_t& src,
00712 delta_kind::kind<Kind> k) const;
00713 template <typename OutputIterator, typename Kind>
00714 void spontaneous_rdelta(OutputIterator res,
00715 unsigned src,
00716 delta_kind::kind<Kind> k) const;
00717
00718
00719
00720
00721
00724 template <typename Container, typename Kind>
00725 void rdeltac(Container& res, const hstate_t& src, delta_kind::kind<Kind> k) const;
00726 template <typename Container, typename Kind>
00727 void rdeltac(Container& res, unsigned src, delta_kind::kind<Kind> k) const;
00728
00732 template <typename Container, typename L, typename Kind>
00733 void rdeltac(Container& res,
00734 const hstate_t& src,
00735 const L& query,
00736 delta_kind::kind<Kind> k) const;
00737 template <typename Container, typename L, typename Kind>
00738 void rdeltac(Container& res,
00739 unsigned src,
00740 const L& query,
00741 delta_kind::kind<Kind> k) const;
00742
00745 template <typename Container, typename L, typename Kind>
00746 void letter_rdeltac(Container& res,
00747 const hstate_t& src,
00748 const L& letter,
00749 delta_kind::kind<Kind> k) const;
00750 template <typename Container, typename L, typename Kind>
00751 void letter_rdeltac(Container& res,
00752 unsigned src,
00753 const L& letter,
00754 delta_kind::kind<Kind> k) const;
00755
00758 template <typename Container, typename Kind>
00759 void spontaneous_rdeltac(Container& res,
00760 const hstate_t& src,
00761 delta_kind::kind<Kind> k) const;
00762 template <typename Container, typename Kind>
00763 void spontaneous_rdeltac(Container& res,
00764 unsigned src,
00765 delta_kind::kind<Kind> k) const;
00766
00767
00768
00769
00770
00771
00774 template <typename Functor, typename Kind>
00775 void rdeltaf(Functor& fun, const hstate_t& src, delta_kind::kind<Kind> k) const;
00776 template <typename Functor, typename Kind>
00777 void rdeltaf(Functor& fun, unsigned src, delta_kind::kind<Kind> k) const;
00778
00781 template <typename Functor, typename L, typename Kind>
00782 void rdeltaf(Functor& fun,
00783 const hstate_t& src,
00784 const L& query,
00785 delta_kind::kind<Kind> k) const;
00786 template <typename Functor, typename L, typename Kind>
00787 void rdeltaf(Functor& fun,
00788 unsigned src,
00789 const L& query,
00790 delta_kind::kind<Kind> k) const;
00791
00794 template <typename Functor, typename L, typename Kind>
00795 void letter_rdeltaf(Functor& fun,
00796 const hstate_t& src,
00797 const L& letter,
00798 delta_kind::kind<Kind> k) const;
00799 template <typename Functor, typename L, typename Kind>
00800 void letter_rdeltaf(Functor& fun,
00801 unsigned src,
00802 const L& letter,
00803 delta_kind::kind<Kind> k) const;
00804
00807 template <typename Functor, typename Kind>
00808 void spontaneous_rdeltaf(Functor& fun,
00809 const hstate_t& src,
00810 delta_kind::kind<Kind> k) const;
00811 template <typename Functor, typename Kind>
00812 void spontaneous_rdeltaf(Functor& fun,
00813 unsigned src,
00814 delta_kind::kind<Kind> k) const;
00815 protected:
00816 MetaElement();
00817 MetaElement(const MetaElement& other);
00818 };
00819
00822
00823 template <typename S, typename St, typename T>
00824 St& op_rout(const AutomataBase<S>& s, St& st, const T& r);
00825
00826 template <typename Auto_>
00827 typename generalized_traits<Auto_>::automaton_t
00828 generalized(const Auto_& from);
00829 }
00830
00831 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00832 # include <vaucanson/automata/concept/automata_base.hxx>
00833 # endif // VCSN_USE_INTERFACE_ONLY
00834
00835 #endif // ! VCSN_AUTOMATA_CONCEPT_AUTOMATA_BASE_HH