00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_MONOID_MONOID_REP_HH
00018 # define VCSN_ALGEBRA_IMPLEMENTATION_MONOID_MONOID_REP_HH
00019 
00020 # include <boost/shared_ptr.hpp>
00021 
00022 # include <vaucanson/algebra/implementation/monoid/monoid_rep_base.hh>
00023 
00024 namespace vcsn
00025 {
00026   namespace algebra
00027   {
00028     template <typename M>
00029     struct MonoidRep : MonoidRepBase<MonoidRep, M>
00030     {
00031     };
00032 
00033     template <typename M>
00034     bool operator==(boost::shared_ptr<MonoidRep<M> >,
00035                     boost::shared_ptr<MonoidRep<M> >);
00036 
00037     template <typename M>
00038     struct MonoidRepDefault
00039     {
00040       
00041       typedef MonoidRep<M>                      monoid_rep_t;
00042       typedef boost::shared_ptr<monoid_rep_t>   pointer_t;
00043 
00044       
00045       static pointer_t get_instance()
00046       {
00047         static pointer_t p(new monoid_rep_t());
00048         return p;
00049       }
00050     };
00051 
00052   } 
00053 
00054 } 
00055 
00056 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00057 #  include <vaucanson/algebra/implementation/monoid/monoid_rep.hxx>
00058 # endif // VCSN_USE_INTERFACE_ONLY
00059 
00060 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_MONOID_MONOID_REP_HH