- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

# transducer_base.hh

    00001 // transducer_base.hh: this file is part of the Vaucanson project.
    00002 //
    00003 // Vaucanson, a generic library for finite state machines.
    00004 //
    00005 // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The
    00006 // Vaucanson Group.
    00007 //
    00008 // This program is free software; you can redistribute it and/or
    00009 // modify it under the terms of the GNU General Public License
    00010 // as published by the Free Software Foundation; either version 2
    00011 // of the License, or (at your option) any later version.
    00012 //
    00013 // The complete GNU General Public Licence Notice can be found as the
    00014 // `COPYING' file in the root directory.
    00015 //
    00016 // The Vaucanson Group consists of people listed in the `AUTHORS' file.
    00017 //
    00018 #ifndef VCSN_AUTOMATA_CONCEPT_TRANSDUCER_BASE_HH
    00019 # define VCSN_AUTOMATA_CONCEPT_TRANSDUCER_BASE_HH
    00020
    00021 # include <iterator>
    00022 # include <vaucanson/design_pattern/design_pattern.hh>
    00023 # include <vaucanson/design_pattern/predecls.hh>
    00024 # include <vaucanson/automata/concept/automata_base.hh>
    00025 # include <vaucanson/misc/usual_macros.hh>
    00026
    00027 namespace vcsn {
    00028
    00032   /*---------------------.
    00033   | TransducerBase<Self> |
    00034   `----------------------*/
    00041   template <typename Self>
    00042   struct TransducerBase
    00043     : AutomataBase<Self>
    00044   {
    00045     public:
    00047       typedef typename virtual_types<Self>::series_set_t  series_set_t;
    00048       typedef typename virtual_types<Self>::kind_t kind_t;
    00049
    00050     protected:
    00052       TransducerBase();
    00053
    00055       TransducerBase(const TransducerBase& other);
    00056   };
    00057
    00059   template <typename T>
    00060   struct transducer_traits
    00061   {
    00062       typedef undefined_type input_monoid_elt_value_t;
    00063       typedef undefined_type output_monoid_elt_value_t;
    00064   };
    00065
    00066   template <typename T>
    00067   struct extension_traits
    00068   {
    00069       typedef undefined_type ret;
    00070   };
    00071
    00072   template <class T>
    00073   struct input_projection_traits
    00074   {
    00075       typedef undefined_type    ret;
    00076   };
    00077
    00078   template <class T>
    00079   struct fmp_input_projection_traits
    00080   {
    00081       typedef undefined_type    ret;
    00082   };
    00083
    00084   // FIXME: the semantics should be defined more precisely.
    00085   // What is the output "on a graph" (it is well defined with
    00086   // transducers)
    00087   template <class T>
    00088   struct output_projection_traits
    00089   {
    00090     typedef undefined_type      ret;
    00091   };
    00092
    00093   template <class T>
    00094   struct fmp_output_projection_traits
    00095   {
    00096     typedef undefined_type      ret;
    00097   };
    00098
    00099   /*-----------------------------------.
    00100   | virtual_types<AutomataBase<Self> > |
    00101   `-----------------------------------*/
    00102   template <class S>
    00103   struct virtual_types<TransducerBase<S> >
    00104     : virtual_types<AutomataBase<S> >
    00105   { };
    00106
    00107   /*------------------------------------.
    00108   | dynamic_traits<AutomataBase<Self> > |
    00109   `------------------------------------*/
    00110   template <class S>
    00111   struct dynamic_traits<TransducerBase<S> >
    00112     : dynamic_traits<AutomataBase<S> >
    00113   { };
    00114
    00115   /*-------------------------------------.
    00116   | MetaElement<TransducerBase<Self>, T> |
    00117   `-------------------------------------*/
    00125   template <typename Self, typename T>
    00126   struct MetaElement<TransducerBase<Self>, T>
    00127     : MetaElement<AutomataBase<Self>, T>
    00128   {
    00130       typedef MetaElement<TransducerBase<Self>, T> self_t;
    00131
    00133       typedef MetaElement<AutomataBase<Self>, T> super_t;
    00134
    00136       typedef MetaElement<AutomataBase<Self>, T> automaton_t;
    00137
    00139       IMPORT_TYPEDEF_(automaton_t, series_set_t);
    00140
    00142       IMPORT_TYPEDEF_(automaton_t, series_set_elt_value_t);
    00143
    00145       IMPORT_TYPEDEF_(automaton_t, series_set_elt_t);
    00146
    00148       IMPORT_TYPEDEF_(automaton_t, monoid_t);
    00149
    00151       IMPORT_TYPEDEF_(automaton_t, monoid_elt_t);
    00152
    00154       IMPORT_TYPEDEF_(automaton_t, monoid_elt_value_t);
    00155
    00157       IMPORT_TYPEDEF_(automaton_t, letter_t);
    00158
    00160       IMPORT_TYPEDEF_(automaton_t, semiring_t);
    00161
    00163       IMPORT_TYPEDEF_(automaton_t, semiring_elt_t);
    00164
    00166       IMPORT_TYPEDEF_(automaton_t, semiring_elt_value_t);
    00167
    00169       IMPORT_TYPEDEF_(automaton_t, tag_t);
    00170
    00172       IMPORT_TYPEDEF_(automaton_t, label_t);
    00173
    00175       IMPORT_TYPEDEF_(automaton_t, states_t);
    00176
    00178       IMPORT_TYPEDEF_(automaton_t, state_iterator);
    00179
    00181       IMPORT_TYPEDEF_(automaton_t, transitions_t);
    00182
    00184       IMPORT_TYPEDEF_(automaton_t, transition_iterator);
    00185
    00187       IMPORT_TYPEDEF_(automaton_t, initial_support_t);
    00188
    00190       IMPORT_TYPEDEF_(automaton_t, initial_iterator);
    00191
    00193       IMPORT_TYPEDEF_(automaton_t, final_support_t);
    00194
    00196       IMPORT_TYPEDEF_(automaton_t, final_iterator);
    00197
    00199       typedef typename super_t::semiring_elt_t output_series_set_elt_t;
    00200
    00201       typedef typename algebra::series_traits<semiring_elt_value_t>::monoid_elt_value_t
    00202       output_monoid_elt_value_t;
    00203
    00205       typedef typename semiring_t::monoid_t     output_monoid_t;
    00206
    00208       typedef Element<output_monoid_t, output_monoid_elt_value_t>
    00209       output_monoid_elt_t;
    00210
    00211       typedef typename output_monoid_t::letter_t output_letter_t;
    00212
    00214       typedef typename super_t::monoid_elt_value_t input_monoid_elt_value_t;
    00215
    00217       typedef typename super_t::monoid_t                input_monoid_t;
    00218
    00220       typedef Element<input_monoid_t, input_monoid_elt_value_t>
    00221       input_monoid_elt_t;
    00222
    00223       typedef typename input_monoid_t::letter_t input_letter_t;
    00224
    00226       typedef typename algebra::series_traits<semiring_elt_value_t>::semiring_elt_value_t
    00227       output_semiring_elt_value_t;
    00228
    00230       typedef typename semiring_t::semiring_t   output_semiring_t;
    00231
    00233       typedef Element<output_semiring_t, output_semiring_elt_value_t>
    00234       output_semiring_elt_t;
    00235
    00237       input_monoid_elt_t input_of(typename automaton_traits<T>::htransition_t) const;
    00238
    00240       output_series_set_elt_t output_of(typename automaton_traits<T>::htransition_t) const;
    00241
    00244       template <typename U, typename V>
    00245       typename automaton_traits<T>::htransition_t
    00246       add_io_transition(typename automaton_traits<T>::hstate_t, typename automaton_traits<T>::hstate_t,
    00247                         const U&,
    00248                         const V&,
    00249                         output_semiring_elt_t = output_semiring_elt_t());
    00250
    00252       template <typename U>
    00253       typename automaton_traits<T>::htransition_t
    00254       add_o_transition(typename automaton_traits<T>::hstate_t, typename automaton_traits<T>::hstate_t,
    00255                        const U&,
    00256                        output_semiring_elt_t = output_semiring_elt_t());
    00257
    00259       template <typename U>
    00260       typename automaton_traits<T>::htransition_t
    00261       add_i_transition(typename automaton_traits<T>::hstate_t, typename automaton_traits<T>::hstate_t,
    00262                        const U&,
    00263                        output_semiring_elt_t = output_semiring_elt_t());
    00264
    00266       template <typename U>
    00267       void set_o_final(typename automaton_traits<T>::hstate_t, const U&);
    00268
    00271       template <typename U>
    00272       void set_o_initial(typename automaton_traits<T>::hstate_t, const U&);
    00273
    00274     protected:
    00275       MetaElement();
    00276       MetaElement(const MetaElement& other);
    00277   };
    00278
    00279
    00283 } // vcsn
    00284
    00285
    00286 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
    00287 #  include <vaucanson/automata/concept/transducer_base.hxx>
    00288 # endif // VCSN_USE_INTERFACE_ONLY
    00289
    00290
    00291 #endif // ! VCSN_AUTOMATA_CONCEPT_TRANSDUCER_BASE_HH