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 <vector>
00021 # include <string>
00022
00023 # include <boost/shared_ptr.hpp>
00024
00025 namespace vcsn {
00026
00027 namespace algebra {
00028
00029 template <typename Monoid>
00030 struct monoid_rep
00031 {
00032 std::string empty;
00033 std::string concat;
00034 std::vector<std::string> maybe_epsilon;
00035
00036
00037 monoid_rep();
00038
00039 };
00040
00041 template <typename M>
00042 bool operator==(boost::shared_ptr<monoid_rep<M> >,
00043 boost::shared_ptr<monoid_rep<M> >);
00044
00045 template <typename Monoid>
00046 struct monoid_rep_default
00047 {
00048 static boost::shared_ptr<monoid_rep<Monoid> > get_instance()
00049 {
00050 static boost::shared_ptr<monoid_rep<Monoid> > p(new monoid_rep<Monoid>);
00051 return p;
00052 }
00053 };
00054
00055 }
00056
00057 }
00058
00059 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00060 # include <vaucanson/algebra/implementation/monoid/monoid_rep.hxx>
00061 # endif // VCSN_USE_INTERFACE_ONLY
00062
00063 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_MONOID_MONOID_REP_HH