00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_SERIES_KRAT_EXP_IS_FINITE_APP_HXX
00018 # define VCSN_ALGEBRA_IMPLEMENTATION_SERIES_KRAT_EXP_IS_FINITE_APP_HXX
00019
00020 # include <utility>
00021 # include <vaucanson/algebra/implementation/series/krat_exp_pattern.hh>
00022
00023 namespace vcsn {
00024
00025 template <class Series, class T, class Dispatch>
00026 class IsFiniteAppMatcher : public algebra::KRatExpMatcher<
00027 IsFiniteAppMatcher<Series, T, Dispatch>,
00028 T,
00029 bool,
00030 Dispatch
00031 >
00032 {
00033 public:
00034 typedef IsFiniteAppMatcher<Series, T, Dispatch> self_t;
00035 typedef bool return_type;
00036 INHERIT_CONSTRUCTORS(self_t, T, return_type, Dispatch);
00037
00038 IsFiniteAppMatcher()
00039 {}
00040
00041 MATCH__(Product, lhs, rhs)
00042 {
00043 return match(lhs) && match(rhs);
00044 }
00045 END
00046
00047 MATCH__(Sum, lhs, rhs)
00048 {
00049 return match(lhs) && match(rhs);
00050 }
00051 END
00052
00053 MATCH_(Star, node)
00054 {
00055 return false;
00056 }
00057 END
00058
00059 MATCH__(LeftWeight, w, node)
00060 {
00061 (void) w;
00062 return match(node);
00063 }
00064 END
00065
00066 MATCH__(RightWeight, node, w)
00067 {
00068 (void) w;
00069 return match(node);
00070 }
00071 END
00072
00073 MATCH_(Constant, m)
00074 {
00075 return true;
00076 }
00077 END
00078
00079 MATCH(Zero)
00080 {
00081 return true;
00082 }
00083 END
00084
00085 MATCH(One)
00086 {
00087 return true;
00088 }
00089 END
00090
00091 };
00092
00093 }
00094
00095 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_SERIES_KRAT_EXP_IS_FINITE_APP_HXX