00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_FREE_MONOID_TOOLS_HXX
00018 # define VCSN_ALGEBRA_IMPLEMENTATION_FREE_MONOID_TOOLS_HXX
00019
00020 # include <vaucanson/algebra/implementation/free_monoid/tools.hh>
00021
00022 namespace vcsn {
00023
00024 namespace algebra {
00025
00026 template<typename A>
00027 const std::list<typename A::letter_t>&
00028 identity_value(SELECTOR(algebra::FreeMonoidBase<A>),
00029 SELECTOR(std::list<typename A::letter_t>))
00030 {
00031 static const std::list<typename A::letter_t> instance;
00032 return instance;
00033 }
00034
00035 template<typename A>
00036 std::list<typename A::letter_t>
00037 op_convert(SELECTOR(algebra::FreeMonoidBase<A>),
00038 SELECTOR(std::list<typename A::letter_t>),
00039 const typename A::letter_t& c)
00040 {
00041 std::list<typename A::letter_t> l;
00042 l.push_back(c);
00043 return l;
00044 }
00045
00046 template <typename A>
00047 void
00048 op_in_mul(const algebra::FreeMonoidBase<A>& s,
00049 std::list<typename A::letter_t>& dst,
00050 const std::list<typename A::letter_t>& src)
00051 {
00052 typedef typename std::list<typename A::letter_t>::const_iterator it_t;
00053 for (it_t i = src.begin();
00054 i != src.end();
00055 i++)
00056 dst.push_back(*i);
00057 }
00058
00059 template <typename A>
00060 std::list<typename A::letter_t>
00061 op_mul(const algebra::FreeMonoidBase<A>& s,
00062 const std::list<typename A::letter_t>& a,
00063 const std::list<typename A::letter_t>& b)
00064 {
00065 typedef typename std::list<typename A::letter_t>::const_iterator it_t;
00066 std::list<typename A::letter_t> ret(a);
00067 op_in_mul(s, ret, b);
00068 return ret;
00069 }
00070
00071 }
00072
00073 }
00074
00075 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_FREE_MONOID_TOOLS_HXX