00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_ALGORITHMS_IS_NORMALIZED_HXX
00018 # define VCSN_ALGORITHMS_IS_NORMALIZED_HXX
00019
00020 # include <vaucanson/algorithms/is_normalized.hh>
00021 # include <vaucanson/automata/concept/automata_base.hh>
00022 # include <vaucanson/misc/usual_macros.hh>
00023
00024 namespace vcsn {
00025
00026 template<typename S, typename A>
00027 bool
00028 do_is_normalized_transducer(const AutomataBase<S>& trans_set,
00029 const A& trans)
00030 {
00031 AUTOMATON_TYPES(A);
00032 bool is_normalized = false;
00033 for_all_const_transitions(e, trans)
00034 {
00035 is_normalized ^= is_support_in_alphabet(trans.series_of(*e));
00036 for_all_const_(series_set_elt_t::support_t,
00037 i,
00038 trans.series_of(*e).supp())
00039 {
00040 is_normalized ^= is_support_in_alphabet(trans.series_of(*e).get(*i));
00041 if (!is_normalized)
00042 return false;
00043 }
00044 }
00045 return true;
00046 }
00047
00048 template<typename S, typename A>
00049 bool
00050 is_normalized_transducer(const Element<S, A>& a)
00051 {
00052 BENCH_TASK_SCOPED("is_normalized_transducer");
00053 return do_is_normalized_transducer(a.structure(), a);
00054 }
00055 }
00056
00057 #endif // ! VCSN_ALGORITHMS_IS_NORMALIZED_HXX