00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_AUTOMATA_CONCEPT_TRANSDUCER_OPS_HH
00018 # define VCSN_AUTOMATA_CONCEPT_TRANSDUCER_OPS_HH
00019
00020 # include <vaucanson/design_pattern/design_pattern.hh>
00021 # include <vaucanson/automata/concept/transducer_base.hh>
00022
00023 namespace vcsn {
00024
00025 #define AutoType(Type) \
00026 typename Element<S, T>::Type
00027
00028 template <class S, class T>
00029 typename Element<S, T>::input_monoid_elt_t
00030 op_input_of(const TransducerBase<S>& s,
00031 const T& v,
00032 typename automaton_traits<T>::htransition_t e);
00033
00034 template <class S, class T>
00035 typename Element<S, T>::output_series_set_elt_t
00036 op_output_of(const TransducerBase<S>& s,
00037 const T& v,
00038 typename automaton_traits<T>::htransition_t e);
00039
00040 template <class S, class T>
00041 typename automaton_traits<T>::htransition_t
00042 op_add_io_transition(const TransducerBase<S>& s,
00043 T& v,
00044 typename automaton_traits<T>::hstate_t from,
00045 typename automaton_traits<T>::hstate_t to,
00046 AutoType(input_letter_t) i,
00047 AutoType(output_letter_t) o,
00048 AutoType(output_semiring_elt_t) w);
00049
00050 template <class S, class T>
00051 typename automaton_traits<T>::htransition_t
00052 op_add_io_transition(const TransducerBase<S>& s,
00053 T& v,
00054 typename automaton_traits<T>::hstate_t from,
00055 typename automaton_traits<T>::hstate_t to,
00056 AutoType(input_monoid_elt_t) input_w,
00057 AutoType(output_monoid_elt_t) output_w,
00058 AutoType(output_semiring_elt_t) w);
00059
00060 template <class S, class T>
00061 typename automaton_traits<T>::htransition_t
00062 op_add_i_transition(const TransducerBase<S>& s,
00063 T& v,
00064 typename automaton_traits<T>::hstate_t from,
00065 typename automaton_traits<T>::hstate_t to,
00066 AutoType(input_letter_t) i,
00067 AutoType(output_semiring_elt_t) w);
00068
00069 template <class S, class T>
00070 typename automaton_traits<T>::htransition_t
00071 op_add_o_transition(const TransducerBase<S>& s,
00072 T& v,
00073 typename automaton_traits<T>::hstate_t from,
00074 typename automaton_traits<T>::hstate_t to,
00075 AutoType(input_letter_t) o,
00076 AutoType(output_semiring_elt_t) w);
00077
00078 template <class S, class T>
00079 static AutoType(series_set_elt_t)
00080 make_series(const TransducerBase<S>& s,
00081 AutoType(output_monoid_elt_value_t) o);
00082
00083 template <class S, class T>
00084 void
00085 op_set_o_final(const TransducerBase<S>& s,
00086 T& v,
00087 typename automaton_traits<T>::hstate_t final,
00088 AutoType(output_monoid_elt_value_t) o);
00089
00090 template <class S, class T>
00091 void
00092 op_set_o_initial(const TransducerBase<S>& s,
00093 T& v,
00094 typename automaton_traits<T>::hstate_t initial,
00095 AutoType(output_monoid_elt_value_t) o);
00096 }
00097
00098
00099 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00100 # include <vaucanson/automata/concept/transducer_ops.hxx>
00101 #endif // VCSN_USE_INTERFACE_ONLY
00102
00103
00104 #endif // ! VCSN_AUTOMATA_CONCEPT_TRANSDUCER_OPS_HH