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/image.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 = compose(sub_normalize(id_aut),
00041 sub_normalize(trans));
00042 image(res_composition, res);
00043 }
00044
00045
00046 template <typename ST, typename TT>
00047 void
00048 evaluation_fmp(const Element<ST, TT>& trans,
00049 const typename input_projection_helper<ST, TT>::ret& aut,
00050 typename output_projection_helper<ST, TT>::ret& res)
00051 {
00052 TIMER_SCOPED("evaluation_fmp");
00053 do_evaluation_fmp(trans.structure(), trans.structure().series().monoid(),
00054 aut.structure(), aut.structure().series().monoid(),
00055 res.structure(), res.structure().series().monoid(),
00056 trans, aut, res);
00057 }
00058
00059 }
00060 #endif // ! VCSN_ALGORITHMS_EVALUATION_FMP_HXX