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
00035 template <typename Self, typename T>
00036 MetaElement<TransducerBase<Self>, T>::MetaElement()
00037 {}
00038
00040 template <typename Self, typename T>
00041 MetaElement<TransducerBase<Self>, T>::MetaElement(const MetaElement& a):
00042 MetaElement<AutomataBase<Self>, T>::MetaElement(a)
00043 {}
00044
00045 template <typename Self, typename T>
00046 typename MetaElement<TransducerBase<Self>, T>::input_monoid_elt_t
00047 MetaElement<TransducerBase<Self>, T>::input_of(htransition_t e) const
00048 {
00049 return op_input_of(this->structure(), this->value(), e);
00050 }
00051
00052 template <typename Self, typename T>
00053 typename MetaElement<TransducerBase<Self>, T>::output_series_set_elt_t
00054 MetaElement<TransducerBase<Self>, T>::output_of(htransition_t e) const
00055 {
00056 return op_output_of(this->structure(), this->value(), e);
00057 }
00058
00059 template <typename Self, typename T>
00060 htransition_t
00061 MetaElement<TransducerBase<Self>, T>::
00062 add_io_transition(hstate_t from,
00063 hstate_t to,
00064 input_monoid_elt_value_t i,
00065 output_monoid_elt_value_t o,
00066 output_semiring_elt_t w)
00067 {
00068 if (w == output_semiring_elt_t())
00069 w = algebra::identity_as<output_semiring_elt_value_t>
00070 ::of(this->series().semiring().semiring());
00071 Element<input_monoid_t, input_monoid_elt_value_t>
00072 i_elt (this->structure().series().monoid(), i);
00073 Element<output_monoid_t, output_monoid_elt_value_t>
00074 o_elt (this->structure().series().semiring().monoid(), o);
00075 return op_add_io_transition(this->structure(), this->value(),
00076 from, to, i_elt, o_elt, w);
00077 }
00078
00079
00080 template <typename Self, typename T>
00081 htransition_t
00082 MetaElement<TransducerBase<Self>, T>::add_io_transition(hstate_t from,
00083 hstate_t to,
00084 input_letter_t i,
00085 output_letter_t o,
00086 output_semiring_elt_t w)
00087 {
00088 if (w == output_semiring_elt_t())
00089 w = algebra::identity_as<output_semiring_elt_value_t>
00090 ::of(this->series().semiring().semiring());
00091 return op_add_io_transition(this->structure(), this->value(),
00092 from, to, i, o, w);
00093 }
00094
00095 template <typename Self, typename T>
00096 htransition_t
00097 MetaElement<TransducerBase<Self>, T>::add_o_transition(hstate_t from,
00098 hstate_t to,
00099 output_letter_t o,
00100 output_semiring_elt_t w)
00101 {
00102 if (w == output_semiring_elt_t())
00103 w = algebra::identity_as<output_semiring_elt_value_t>
00104 ::of(this->series().semiring().semiring());
00105
00106 return op_add_o_transition(this->structure(), this->value(),
00107 from, to, o, w);
00108 }
00109
00110 template <typename Self, typename T>
00111 htransition_t
00112 MetaElement<TransducerBase<Self>, T>::add_i_transition(hstate_t from,
00113 hstate_t to,
00114 input_letter_t i,
00115 output_semiring_elt_t w)
00116 {
00117 if (w == output_semiring_elt_t())
00118 w = algebra::identity_as<output_semiring_elt_value_t>
00119 ::of(this->series().semiring().semiring());
00120
00121 return op_add_i_transition(this->structure(), this->value(),
00122 from, to, i, w);
00123 }
00124
00125 template <typename Self, typename T>
00126 void
00127 MetaElement<TransducerBase<Self>, T>::
00128 set_o_final(hstate_t final,
00129 output_monoid_elt_value_t o)
00130 {
00131 op_set_o_final(this->structure(), this->value(), final, o);
00132 }
00133
00134 template <typename Self, typename T>
00135 void
00136 MetaElement<TransducerBase<Self>, T>::
00137 set_o_initial(hstate_t initial,
00138 output_monoid_elt_value_t o)
00139 {
00140 op_set_o_initial(this->structure(), this->value(), initial, o);
00141 }
00142
00143 }
00144
00145 #endif // ! VCSN_AUTOMATA_CONCEPT_TRANSDUCER_BASE_HXX