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
00074 template<class Self>
00075 const std::string
00076 representation_traits<algebra::FreeMonoidProductBase<Self> >::
00077 default_eps_eps()
00078 {
00079 return "1";
00080 };
00081
00082
00083
00084
00085 template <class Self, typename T>
00086 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::MetaElement() :
00087 MetaElement<algebra::MonoidBase<Self>, T>()
00088 {}
00089
00090 template <class Self, typename T>
00091 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::
00092 MetaElement(const MetaElement& o) :
00093 MetaElement<algebra::MonoidBase<Self>, T>(o)
00094 {}
00095
00096 template <class Self, typename T>
00097 typename
00098 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first_monoid_elt_t&
00099 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first()
00100 {
00101 return op_first(this->structure(), this->value());
00102 }
00103
00104 template <class Self, typename T>
00105 const
00106 typename
00107 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first_monoid_elt_t&
00108 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first() const
00109 {
00110 return op_first(this->structure(), this->value());
00111 }
00112
00113 template <class Self, typename T>
00114 typename
00115 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second_monoid_elt_t&
00116 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second()
00117 {
00118 return op_second(this->structure(), this->value());
00119 }
00120
00121 template <class Self, typename T>
00122 const
00123 typename
00124 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second_monoid_elt_t&
00125 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::second() const
00126 {
00127 return op_second(this->structure(), this->value());
00128 }
00129
00130 template <class Self, typename T>
00131 void
00132 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::mirror()
00133 {
00134 op_in_mirror(this->structure(), this->value());
00135 }
00136
00137 template <class Self, typename T>
00138 template <class Ftor>
00139 typename Ftor::result_type
00140 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::length(Ftor f)
00141 {
00142 return op_length(this->structure(), this->value(), f);
00143 }
00144
00145 namespace algebra
00146 {
00147 template <typename Self, typename St, typename T>
00148 St&
00149 op_rout(const FreeMonoidProductBase<Self>& s,
00150 St& st,
00151 const T& v)
00152 {
00153 return op_rout(s.self(), st, v);
00154 }
00155
00156 }
00157
00158 }
00159
00160 #endif // ! VCSN_ALGEBRA_CONCEPT_FREEMONOID_PRODUCT_BASE_HXX