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 namespace algebra {
00028
00029
00030
00031
00032
00033 template <class Self, typename T>
00034 typename
00035 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first_monoid_elt_t
00036 op_first(const algebra::FreeMonoidProductBase<Self>& s, T& v);
00037
00038 template <class Self, typename T>
00039 typename
00040 MetaElement<algebra::FreeMonoidProductBase<Self>, T>::first_monoid_elt_t
00041 op_second(const algebra::FreeMonoidProductBase<Self>& s, T& v);
00042
00043 template <class F, class S>
00044 void
00045 op_in_mul(const algebra::FreeMonoidProduct<F, S>& s,
00046 std::pair<std::basic_string<typename F::letter_t>,
00047 std::basic_string<typename S::letter_t> >& dst,
00048 const std::pair<std::basic_string<typename F::letter_t>,
00049 std::basic_string<typename S::letter_t> >& src);
00050
00051 template<class F, class S>
00052 std::pair<std::basic_string<typename F::letter_t>,
00053 std::basic_string<typename S::letter_t> >
00054 op_mul(const algebra::FreeMonoidProduct<F, S>& s,
00055 const std::pair<std::basic_string<typename F::letter_t>,
00056 std::basic_string<typename S::letter_t> >& a,
00057 const std::pair<std::basic_string<typename F::letter_t>,
00058 std::basic_string<typename S::letter_t> >& b);
00059
00060 template<class F, class S>
00061 const std::pair<std::basic_string<typename F::letter_t>,
00062 std::basic_string<typename S::letter_t> >
00063 identity_value(SELECTOR2(algebra::FreeMonoidProduct<F, S>),
00064 SELECTOR2(std::pair<std::basic_string<typename F::letter_t>,
00065 std::basic_string<typename S::letter_t> >));
00066
00067 template<class F, class S>
00068 Element<algebra::FreeMonoidProduct<F, S>,
00069 std::pair<std::basic_string<typename F::letter_t>,
00070 std::basic_string<typename S::letter_t> > >
00071 op_choose(const algebra::FreeMonoidProduct<F, S>& s,
00072 SELECTOR2(std::pair<std::basic_string<typename F::letter_t>,
00073 std::basic_string<typename S::letter_t> >));
00074
00075 template<typename Self, typename T>
00076 void op_in_mirror (const algebra::FreeMonoidProductBase<Self>& s, T& v);
00077
00078 template<typename Self, typename T, typename Ftor>
00079 typename Ftor::result_type
00080 op_length(const algebra::FreeMonoidProductBase<Self>&, const T& v, Ftor f);
00081
00082 template <typename Self, typename St, typename T>
00083 St&
00084 op_rout(const algebra::FreeMonoidProductBase<Self>& s,
00085 St& st,
00086 const T& v);
00087
00088 }
00089
00090 }
00091
00092 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00093 # include <vaucanson/algebra/implementation/free_monoid_product/freemonoid_product_pair_str.hxx>
00094 # endif // VCSN_USE_INTERFACE_ONLY
00095
00096 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_FREE_MONOID_PRODUCT_FREEMONOID_PRODUCT_PAIR_STR_HH