00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00023
#ifndef libmath_printer_h
00024
#define libmath_printer_h
00025
00026
#include <math++/visitor.h>
00027
00028
#include <iosfwd>
00029
00030
namespace math {
00031
00036
template<
class T>
00037 class TPrinter :
public TNodeVisitor<T> {
00038
private:
00039 std::ostream& FStream;
00040
TPrinter(std::ostream& AOutput);
00041
00043
void savePrint(
const TNode<T> *ANode,
const TNode<T> *AParent);
00044
00045
virtual void visit(
TNumberNode<T> *);
00046
virtual void visit(
TSymbolNode<T> *);
00047
virtual void visit(
TParamNode<T> *);
00048
00049
virtual void visit(
TPlusNode<T> *);
00050
virtual void visit(
TNegNode<T> *);
00051
00052
virtual void visit(
TMulNode<T> *);
00053
virtual void visit(
TDivNode<T> *);
00054
00055
virtual void visit(
TPowNode<T> *);
00056
virtual void visit(
TSqrtNode<T> *);
00057
00058
virtual void visit(
TSinNode<T> *);
00059
virtual void visit(
TCosNode<T> *);
00060
virtual void visit(
TTanNode<T> *);
00061
virtual void visit(
TLnNode<T> *);
00062
00063
virtual void visit(
TFuncNode<T> *);
00064
virtual void visit(
TIfNode<T> *);
00065
00066
virtual void visit(
TEquNode<T> *);
00067
virtual void visit(TUnEquNode<T> *);
00068
virtual void visit(TGreaterNode<T> *);
00069
virtual void visit(TLessNode<T> *);
00070
virtual void visit(TGreaterEquNode<T> *);
00071
virtual void visit(TLessEquNode<T> *);
00072
00073
public:
00077
static void printOn(std::ostream& AOutput,
const TNode<T> *AExpr);
00078
00085
static std::string
print(
const TNode<T> *AExpr);
00086 };
00087
00088 }
00089
00090
#include <math++/printer.tcc>
00091
00092
#endif