00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_ALGEBRA_CONCEPT_FREEMONOID_PRODUCT_BASE_HXX
00018 # define VCSN_ALGEBRA_CONCEPT_FREEMONOID_PRODUCT_BASE_HXX
00019
00020 # include <vaucanson/algebra/concept/freemonoid_product_base.hh>
00021
00022 namespace vcsn {
00023
00024 namespace algebra {
00025
00026
00027
00028
00029
00030 template <class Self>
00031 typename FreeMonoidProductBase<Self>::first_monoid_t&
00032 FreeMonoidProductBase<Self>::first_monoid()
00033 {
00034 return this->self().first_monoid();
00035 }
00036
00037 template <class Self>
00038 const typename FreeMonoidProductBase<Self>::first_monoid_t&
00039 FreeMonoidProductBase<Self>::first_monoid() const
00040 {
00041 return this->self().first_monoid();
00042 }
00043
00044 template <class Self>
00045 typename FreeMonoidProductBase<Self>::second_monoid_t&
00046 FreeMonoidProductBase<Self>::second_monoid()
00047 {
00048 return this->self().second_monoid();
00049 }
00050
00051 template <class Self>
00052 const typename FreeMonoidProductBase<Self>::second_monoid_t&
00053 FreeMonoidProductBase<Self>::second_monoid() const
00054 {
00055 return this->self().second_monoid();
00056 }
00057
00058 template <class Self>
00059 FreeMonoidProductBase<Self>::FreeMonoidProductBase()
00060 {}
00061
00062 template <class Self>
00063 FreeMonoidProductBase<Self>::
00064 FreeMonoidProductBase(const FreeMonoidProductBase& m) :
00065 MonoidBase<Self>(m)
00066 {}
00067
00068 }
00069
00070
00071
00072
00073 template <class Self, typename T>
00074 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::MetaElement() :
00075 MetaElement<algebra::MonoidBase<Self>, T>()
00076 {}
00077
00078 template <class Self, typename T>
00079 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::
00080 MetaElement(const MetaElement& o) :
00081 MetaElement<algebra::MonoidBase<Self>, T>(o)
00082 {}
00083
00084 template <class Self, typename T>
00085 typename
00086 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first_monoid_elt_t&
00087 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first()
00088 {
00089 return op_first(this->structure(), this->value());
00090 }
00091
00092 template <class Self, typename T>
00093 const
00094 typename
00095 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first_monoid_elt_t&
00096 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first() const
00097 {
00098 return op_first(this->structure(), this->value());
00099 }
00100
00101 template <class Self, typename T>
00102 typename
00103 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second_monoid_elt_t&
00104 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second()
00105 {
00106 return op_second(this->structure(), this->value());
00107 }
00108
00109 template <class Self, typename T>
00110 const
00111 typename
00112 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second_monoid_elt_t&
00113 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second() const
00114 {
00115 return op_second(this->structure(), this->value());
00116 }
00117
00118 template <class Self, typename T>
00119 void
00120 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::mirror()
00121 {
00122 op_in_mirror(this->structure(), this->value());
00123 }
00124
00125 template <class Self, typename T>
00126 template <class Ftor>
00127 typename Ftor::result_type
00128 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::length(Ftor f)
00129 {
00130 return op_length(this->structure(), this->value(), f);
00131 }
00132
00133 namespace algebra
00134 {
00135 template <typename Self, typename St, typename T>
00136 St&
00137 op_rout(const FreeMonoidProductBase<Self>& s,
00138 St& st,
00139 const T& v)
00140 {
00141 return op_rout(s.self(), st, v);
00142 }
00143
00144 }
00145
00146 }
00147
00148 #endif // ! VCSN_ALGEBRA_CONCEPT_FREEMONOID_PRODUCT_BASE_HXX