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
00025 template<typename A>
00026 const std::list<typename A::letter_t>&
00027 identity_value(SELECTOR(algebra::FreeMonoidBase<A>),
00028 SELECTOR(std::list<typename A::letter_t>))
00029 {
00030 static const std::list<typename A::letter_t> instance;
00031 return instance;
00032 }
00033
00034 template<typename A>
00035 std::list<typename A::letter_t>
00036 op_convert(SELECTOR(algebra::FreeMonoidBase<A>),
00037 SELECTOR(std::list<typename A::letter_t>),
00038 const typename A::letter_t& c)
00039 {
00040 std::list<typename A::letter_t> l;
00041 l.push_back(c);
00042 return l;
00043 }
00044
00045 template <typename A>
00046 void
00047 op_in_mul(const algebra::FreeMonoidBase<A>& s,
00048 std::list<typename A::letter_t>& dst,
00049 const std::list<typename A::letter_t>& src)
00050 {
00051 typedef typename std::list<typename A::letter_t>::const_iterator it_t;
00052 for (it_t i = src.begin();
00053 i != src.end();
00054 i++)
00055 dst.push_back(*i);
00056 }
00057
00058 template <typename A>
00059 std::list<typename A::letter_t>
00060 op_mul(const algebra::FreeMonoidBase<A>& s,
00061 const std::list<typename A::letter_t>& a,
00062 const std::list<typename A::letter_t>& b)
00063 {
00064 typedef typename std::list<typename A::letter_t>::const_iterator it_t;
00065 std::list<typename A::letter_t> ret(a);
00066 op_in_mul(s, ret, b);
00067 return ret;
00068 }
00069
00070 }
00071
00072 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_FREE_MONOID_TOOLS_HXX