00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_ALGORITHMS_EVALUATION_FMP_HXX
00018 # define VCSN_ALGORITHMS_EVALUATION_FMP_HXX
00019
00020 # include <vaucanson/algorithms/evaluation_fmp.hh>
00021 # include <vaucanson/algorithms/projections_fmp.hh>
00022 # include <vaucanson/algorithms/normalized_composition.hh>
00023 # include <vaucanson/algorithms/sub_normalize.hh>
00024 # include <vaucanson/algebra/concept/freemonoid_product.hh>
00025
00026 namespace vcsn
00027 {
00028 template <typename S1, typename S2, typename S3,
00029 typename M1, typename M2, typename M3, typename M4,
00030 typename trans_t, typename auto_t, typename res_t>
00031 void
00032 do_evaluation_fmp(const AutomataBase<S1>&,
00033 const algebra::FreeMonoidProduct<M1, M2>&,
00034 const AutomataBase<S2>&, const algebra::FreeMonoid<M3>&,
00035 const AutomataBase<S3>&, const algebra::FreeMonoid<M4>&,
00036 const trans_t& trans, const auto_t& aut, res_t& res)
00037 {
00038 trans_t id_aut(trans.structure());
00039 identity(aut, id_aut);
00040 trans_t res_composition = normalized_composition(sub_normalize(id_aut),
00041 sub_normalize(trans));
00042 image(res_composition, res);
00043 }
00044
00045
00046 template<typename SA, typename TA,
00047 typename ST, typename TT,
00048 typename SARES, typename TARES>
00049 void
00050 evaluation_fmp(const Element<ST, TT>& trans,
00051 const Element<SA, TA>& aut,
00052 Element<SARES, TARES>& res)
00053 {
00054 do_evaluation_fmp(trans.structure(), trans.structure().series().monoid(),
00055 aut.structure(), aut.structure().series().monoid(),
00056 res.structure(), res.structure().series().monoid(),
00057 trans, aut, res);
00058
00059 }
00060
00061 }
00062 #endif // ! VCSN_ALGORITHMS_EVALUATION_FMP_HXX