freemonoid_product_base.hxx

00001 // freemonoid_product_base.hxx: this file is part of the Vaucanson project.
00002 //
00003 // Vaucanson, a generic library for finite state machines.
00004 //
00005 // Copyright (C) 2004, 2005 The Vaucanson Group.
00006 //
00007 // This program is free software; you can redistribute it and/or
00008 // modify it under the terms of the GNU General Public License
00009 // as published by the Free Software Foundation; either version 2
00010 // of the License, or (at your option) any later version.
00011 //
00012 // The complete GNU General Public Licence Notice can be found as the
00013 // `COPYING' file in the root directory.
00014 //
00015 // The Vaucanson Group consists of people listed in the `AUTHORS' file.
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     | FreeMonoidProductBase<Self> |
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   } // algebra
00068 
00069   /*--------------------------------------------.
00070   | MetaElement<FreeMonoidProductBase<Self>, T> |
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 } // vcsn
00133 
00134 #endif // ! VCSN_ALGEBRA_CONCEPT_FREEMONOID_PRODUCT_BASE_HXX

Generated on Sat Jul 29 17:12:59 2006 for Vaucanson by  doxygen 1.4.6