00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_AUTOMATA_CONCEPT_TRANSDUCER_BASE_HXX
00018 # define VCSN_AUTOMATA_CONCEPT_TRANSDUCER_BASE_HXX
00019
00020 # include <vaucanson/automata/concept/transducer_base.hh>
00021 # include <vaucanson/automata/concept/transducer_ops.hh>
00022
00023 namespace vcsn {
00024
00025 template <typename Self>
00026 TransducerBase<Self>::TransducerBase()
00027 {}
00028
00029 template <typename Self>
00030 TransducerBase<Self>::TransducerBase(const TransducerBase& other) :
00031 AutomataBase<Self>(other)
00032 {}
00033
00034 template <typename Self, typename T>
00035 MetaElement<TransducerBase<Self>, T>::MetaElement()
00036 {}
00037
00038 template <typename Self, typename T>
00039 MetaElement<TransducerBase<Self>, T>::MetaElement(const MetaElement& a):
00040 MetaElement<AutomataBase<Self>, T>::MetaElement(a)
00041 {}
00042
00043 template <typename Self, typename T>
00044 typename MetaElement<TransducerBase<Self>, T>::input_monoid_elt_t
00045 MetaElement<TransducerBase<Self>, T>::input_of(typename automaton_traits<T>::htransition_t e) const
00046 {
00047 return op_input_of(this->structure(), this->value(), e);
00048 }
00049
00050 template <typename Self, typename T>
00051 typename MetaElement<TransducerBase<Self>, T>::output_series_set_elt_t
00052 MetaElement<TransducerBase<Self>, T>::output_of(typename automaton_traits<T>::htransition_t e) const
00053 {
00054 return op_output_of(this->structure(), this->value(), e);
00055 }
00056
00057 template <typename Self, typename T>
00058 template <typename U, typename V>
00059 typename automaton_traits<T>::htransition_t
00060 MetaElement<TransducerBase<Self>, T>::
00061 add_io_transition(typename automaton_traits<T>::hstate_t from,
00062 typename automaton_traits<T>::hstate_t to,
00063 const U& i,
00064 const V& o,
00065 output_semiring_elt_t w)
00066 {
00067 if (w == output_semiring_elt_t())
00068 w = algebra::identity_as<output_semiring_elt_value_t>
00069 ::of(this->series().semiring().semiring());
00070 Element<input_monoid_t, input_monoid_elt_value_t>
00071 i_elt (this->structure().series().monoid(), i);
00072 Element<output_monoid_t, output_monoid_elt_value_t>
00073 o_elt (this->structure().series().semiring().monoid(), o);
00074 return op_add_io_transition(this->structure(), this->value(),
00075 from, to, i_elt, o_elt, w);
00076 }
00077
00078 template <typename Self, typename T>
00079 template <typename U>
00080 typename automaton_traits<T>::htransition_t
00081 MetaElement<TransducerBase<Self>, T>::
00082 add_o_transition(typename automaton_traits<T>::hstate_t from,
00083 typename automaton_traits<T>::hstate_t to,
00084 const U& o,
00085 output_semiring_elt_t w)
00086 {
00087 if (w == output_semiring_elt_t())
00088 w = algebra::identity_as<output_semiring_elt_value_t>
00089 ::of(this->series().semiring().semiring());
00090 Element<output_monoid_t, output_monoid_elt_value_t>
00091 o_elt (this->structure().series().semiring().monoid(), o);
00092 return op_add_o_transition(this->structure(), this->value(),
00093 from, to, o_elt, w);
00094 }
00095
00096 template <typename Self, typename T>
00097 template <typename U>
00098 typename automaton_traits<T>::htransition_t
00099 MetaElement<TransducerBase<Self>, T>::
00100 add_i_transition(typename automaton_traits<T>::hstate_t from,
00101 typename automaton_traits<T>::hstate_t to,
00102 const U& i,
00103 output_semiring_elt_t w)
00104 {
00105 if (w == output_semiring_elt_t())
00106 w = algebra::identity_as<output_semiring_elt_value_t>
00107 ::of(this->series().semiring().semiring());
00108 Element<input_monoid_t, input_monoid_elt_value_t>
00109 i_elt (this->structure().series().monoid(), i);
00110 return op_add_i_transition(this->structure(), this->value(),
00111 from, to, i_elt, w);
00112 }
00113
00114 template <typename Self, typename T>
00115 template <typename U>
00116 void
00117 MetaElement<TransducerBase<Self>, T>::
00118 set_o_final(typename automaton_traits<T>::hstate_t final,
00119 const U& o)
00120 {
00121 Element<output_monoid_t, output_monoid_elt_value_t>
00122 o_elt (this->structure().series().semiring().monoid(), o);
00123 op_set_o_final(this->structure(), this->value(), final, o_elt.value());
00124 }
00125
00126 template <typename Self, typename T>
00127 template <typename U>
00128 void
00129 MetaElement<TransducerBase<Self>, T>::
00130 set_o_initial(typename automaton_traits<T>::hstate_t initial,
00131 const U& o)
00132 {
00133 Element<output_monoid_t, output_monoid_elt_value_t>
00134 o_elt (this->structure().series().semiring().monoid(), o);
00135 op_set_o_initial(this->structure(), this->value(), initial, o_elt.value());
00136 }
00137
00138 }
00139
00140 #endif // ! VCSN_AUTOMATA_CONCEPT_TRANSDUCER_BASE_HXX