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 template <class Self>
00044 typename FreeMonoidProductBase<Self>::second_monoid_t&
00045 FreeMonoidProductBase<Self>::second_monoid()
00046 {
00047 return this->self().second_monoid();
00048 }
00049
00050 template <class Self>
00051 const typename FreeMonoidProductBase<Self>::second_monoid_t&
00052 FreeMonoidProductBase<Self>::second_monoid() const
00053 {
00054 return this->self().second_monoid();
00055 }
00056
00057 template <class Self>
00058 FreeMonoidProductBase<Self>::FreeMonoidProductBase()
00059 {}
00060
00061 template <class Self>
00062 FreeMonoidProductBase<Self>::
00063 FreeMonoidProductBase(const FreeMonoidProductBase& m) :
00064 MonoidBase<Self>(m)
00065 {}
00066
00067 }
00068
00069
00070
00071
00072 template <class Self, typename T>
00073 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::MetaElement() :
00074 MetaElement<algebra::MonoidBase<Self>, T>()
00075 {}
00076
00077 template <class Self, typename T>
00078 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::
00079 MetaElement(const MetaElement& o) :
00080 MetaElement<algebra::MonoidBase<Self>, T>(o)
00081 {}
00082
00083 template <class Self, typename T>
00084 typename
00085 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first_monoid_elt_t&
00086 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first()
00087 {
00088 return op_first(this->structure(), this->value());
00089 }
00090
00091 template <class Self, typename T>
00092 const
00093 typename
00094 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first_monoid_elt_t&
00095 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first() const
00096 {
00097 return op_first(this->structure(), this->value());
00098 }
00099
00100 template <class Self, typename T>
00101 typename
00102 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second_monoid_elt_t&
00103 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second()
00104 {
00105 return op_second(this->structure(), this->value());
00106 }
00107
00108 template <class Self, typename T>
00109 const
00110 typename
00111 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second_monoid_elt_t&
00112 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second() const
00113 {
00114 return op_second(this->structure(), this->value());
00115 }
00116
00117 template <class Self, typename T>
00118 void
00119 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::mirror()
00120 {
00121 op_in_mirror(this->structure(), this->value());
00122 }
00123
00124 template <class Self, typename T>
00125 template <class Ftor>
00126 typename Ftor::result_type
00127 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::length(Ftor f)
00128 {
00129 return op_length(this->structure(), this->value(), f);
00130 }
00131
00132 }
00133
00134 #endif // ! VCSN_ALGEBRA_CONCEPT_FREEMONOID_PRODUCT_BASE_HXX