00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_FREE_MONOID_PRODUCT_FREEMONOID_PRODUCT_PAIR_STR_HH
00018 # define VCSN_ALGEBRA_IMPLEMENTATION_FREE_MONOID_PRODUCT_FREEMONOID_PRODUCT_PAIR_STR_HH
00019
00020 # include <vaucanson/algebra/concept/freemonoid_product.hh>
00021
00022 # include <utility>
00023 # include <string>
00024
00025 namespace vcsn {
00026
00027
00028
00029
00030
00031 template <class Self, typename T>
00032 typename
00033 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first_monoid_elt_t&
00034 op_first(const algebra::FreeMonoidProductBase<Self>& s, T& v);
00035
00036 template <class Self, typename T>
00037 typename
00038 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first_monoid_elt_t&
00039 op_second(const algebra::FreeMonoidProductBase<Self>& s, T& v);
00040
00041 template <class F, class S>
00042 void
00043 op_in_mul(const algebra::FreeMonoidProduct<F, S>& s,
00044 std::pair<std::basic_string<typename F::letter_t>,
00045 std::basic_string<typename S::letter_t> >& dst,
00046 const std::pair<std::basic_string<typename F::letter_t>,
00047 std::basic_string<typename S::letter_t> >& src);
00048
00049 template<class F, class S>
00050 std::pair<std::basic_string<typename F::letter_t>,
00051 std::basic_string<typename S::letter_t> >
00052 op_mul(const algebra::FreeMonoidProduct<F, S>& s,
00053 const std::pair<std::basic_string<typename F::letter_t>,
00054 std::basic_string<typename S::letter_t> >& a,
00055 const std::pair<std::basic_string<typename F::letter_t>,
00056 std::basic_string<typename S::letter_t> >& b);
00057
00058 template<class F, class S>
00059 const std::pair<std::basic_string<typename F::letter_t>,
00060 std::basic_string<typename S::letter_t> >
00061 identity_value(SELECTOR2(algebra::FreeMonoidProduct<F, S>),
00062 SELECTOR2(std::pair<std::basic_string<typename F::letter_t>,
00063 std::basic_string<typename S::letter_t> >));
00064
00065 template<class F, class S>
00066 Element<algebra::FreeMonoidProduct<F, S>,
00067 std::pair<std::basic_string<typename F::letter_t>,
00068 std::basic_string<typename S::letter_t> > >
00069 op_choose(const algebra::FreeMonoidProduct<F, S>& s,
00070 SELECTOR2(std::pair<std::basic_string<typename F::letter_t>,
00071 std::basic_string<typename S::letter_t> >));
00072
00073 template<typename Self, typename T>
00074 void op_in_mirror (const algebra::FreeMonoidProductBase<Self>& s, T& v);
00075
00076 template<typename Self, typename T, typename Ftor>
00077 typename Ftor::result_type
00078 op_length(const algebra::FreeMonoidProductBase<Self>&, const T& v, Ftor f);
00079
00080 template <typename Self, typename St, typename T>
00081 St&
00082 op_rout(const algebra::FreeMonoidProductBase<Self>& s,
00083 St& st,
00084 const T& v);
00085
00086 }
00087
00088 # ifndef VCSN_USE_INTERFACE_ONLY
00089 # include <vaucanson/algebra/implementation/free_monoid_product/freemonoid_product_pair_str.hxx>
00090 # endif // VCSN_USE_INTERFACE_ONLY
00091
00092 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_FREE_MONOID_PRODUCT_FREEMONOID_PRODUCT_PAIR_STR_HH