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