17 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_MONOID_PAIR_STR_WORDS_HH
18 # define VCSN_ALGEBRA_IMPLEMENTATION_MONOID_PAIR_STR_WORDS_HH
25 # include <vaucanson/algebra/concept/freemonoid_product.hh>
37 template <
typename Self,
typename T>
39 op_first(
const FreeMonoidProductBase<Self>& s, T& v);
41 template <
typename Self,
typename T>
43 op_second(
const FreeMonoidProductBase<Self>& s, T& v);
45 template <
typename Self,
typename T>
47 op_in_mirror(
const FreeMonoidProductBase<Self>& s, T& v);
49 template <
typename Self,
typename T,
typename Ftor>
50 typename Ftor::result_type
51 op_length(
const FreeMonoidProductBase<Self>&,
const T& v, Ftor f);
53 template<
typename F,
typename S,
54 typename A1,
typename A2,
typename A3,
typename A4>
56 op_is_atom(
const algebra::FreeMonoidProduct<F, S>&,
57 const std::pair<std::basic_string<typename F::letter_t, A1, A2>,
58 std::basic_string<typename S::letter_t, A3, A4>
61 template <
class F,
class S>
63 op_in_mul(
const algebra::FreeMonoidProduct<F, S>& s,
64 std::pair<std::basic_string<typename F::letter_t>,
65 std::basic_string<typename S::letter_t> >& dst,
66 const std::pair<std::basic_string<typename F::letter_t>,
67 std::basic_string<typename S::letter_t> >& src);
69 template<
class F,
class S>
70 std::pair<std::basic_string<typename F::letter_t>,
71 std::basic_string<typename S::letter_t> >
72 op_mul(
const algebra::FreeMonoidProduct<F, S>& s,
73 const std::pair<std::basic_string<typename F::letter_t>,
74 std::basic_string<typename S::letter_t> >& a,
75 const std::pair<std::basic_string<typename F::letter_t>,
76 std::basic_string<typename S::letter_t> >& b);
78 template<
class F,
class S>
79 const std::pair<std::basic_string<typename F::letter_t>,
80 std::basic_string<typename S::letter_t> >
81 identity_value(
SELECTOR2(algebra::FreeMonoidProduct<F, S>),
82 SELECTOR2(std::pair<std::basic_string<typename F::letter_t>,
83 std::basic_string<typename S::letter_t> >));
85 template<
class F,
class S>
86 Element<algebra::FreeMonoidProduct<F, S>,
87 std::pair<std::basic_string<typename F::letter_t>,
88 std::basic_string<typename S::letter_t> > >
89 op_choose(
const algebra::FreeMonoidProduct<F, S>& s,
90 SELECTOR2(std::pair<std::basic_string<typename F::letter_t>,
91 std::basic_string<typename S::letter_t> >));
93 template <
typename F,
typename S,
typename St>
95 op_rout(
const FreeMonoidProduct<F, S>& s,
97 const std::pair<std::basic_string<typename F::letter_t>,
98 std::basic_string<typename S::letter_t> >& v);
104 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
105 # include <vaucanson/algebra/implementation/monoid/pair_str_words.hxx>
106 # endif // ! VCSN_USE_INTERFACE_ONLY
108 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_MONOID_PAIR_STR_WORDS_HH