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 precondition(is_sub_normalized(trans));
00039 precondition(is_realtime(aut));
00040 trans_t id_aut(trans.structure());
00041 identity(aut, id_aut);
00042 trans_t res_composition = compose(id_aut, trans);
00043 image(res_composition, res);
00044 }
00045
00046
00047 template <typename ST, typename TT>
00048 void
00049 evaluation_fmp(const Element<ST, TT>& trans,
00050 const typename input_projection_helper<ST, TT>::ret& aut,
00051 typename output_projection_helper<ST, TT>::ret& res)
00052 {
00053 BENCH_TASK_SCOPED("evaluation_fmp");
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 #endif // ! VCSN_ALGORITHMS_EVALUATION_FMP_HXX