00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00023 #ifndef libmath_visitor_h
00024 #define libmath_visitor_h
00025
00026 namespace math {
00027
00028 template<class> class TNumberNode;
00029 template<class> class TSymbolNode;
00030 template<class> class TParamNode;
00031
00032 template<class> class TPlusNode;
00033 template<class> class TNegNode;
00034
00035 template<class> class TMulNode;
00036 template<class> class TDivNode;
00037
00038 template<class> class TPowNode;
00039
00040 template<class> class TSqrtNode;
00041 template<class> class TSinNode;
00042 template<class> class TCosNode;
00043 template<class> class TTanNode;
00044 template<class> class TCoTanNode;
00045 template<class> class TLnNode;
00046
00047 template<class> class TFuncNode;
00048
00049 template<class> class TIfNode;
00050
00051 template<class> class TEquNode;
00052 template<class> class TUnEquNode;
00053 template<class> class TGreaterNode;
00054 template<class> class TLessNode;
00055 template<class> class TGreaterEquNode;
00056 template<class> class TLessEquNode;
00057
00063 template<typename T>
00064 class TNodeVisitor {
00065 public:
00066 virtual ~TNodeVisitor() {};
00067
00068 virtual void visit(TNumberNode<T> *) = 0;
00069 virtual void visit(TSymbolNode<T> *) = 0;
00070 virtual void visit(TParamNode<T> *) = 0;
00071
00072 virtual void visit(TPlusNode<T> *) = 0;
00073 virtual void visit(TNegNode<T> *) = 0;
00074
00075 virtual void visit(TMulNode<T> *) = 0;
00076 virtual void visit(TDivNode<T> *) = 0;
00077
00078 virtual void visit(TPowNode<T> *) = 0;
00079 virtual void visit(TSqrtNode<T> *) = 0;
00080
00081 virtual void visit(TSinNode<T> *) = 0;
00082 virtual void visit(TCosNode<T> *) = 0;
00083 virtual void visit(TTanNode<T> *) = 0;
00084 virtual void visit(TLnNode<T> *) = 0;
00085
00086 virtual void visit(TFuncNode<T> *) = 0;
00087 virtual void visit(TIfNode<T> *) = 0;
00088
00089 virtual void visit(TEquNode<T> *) = 0;
00090 virtual void visit(TUnEquNode<T> *) = 0;
00091 virtual void visit(TGreaterNode<T> *) = 0;
00092 virtual void visit(TLessNode<T> *) = 0;
00093 virtual void visit(TGreaterEquNode<T> *) = 0;
00094 virtual void visit(TLessEquNode<T> *) = 0;
00095 };
00096
00097 }
00098
00099 #endif