/////////////////////////////////////////////////////////////////////// // Math Type Library // $Id: printer.h,v 1.5 2002/04/20 06:31:21 cparpart Exp $ // (This file contains the expression stream printer specific interface) // // Copyright (c) 2002 by Christian Parpart // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public License // along with this library; see the file COPYING.LIB. If not, write to // the Free Software Foundation, Inc., 59 Temple Place - Suite 330, // Boston, MA 02111-1307, USA. /////////////////////////////////////////////////////////////////////// #ifndef libmath_printer_h #define libmath_printer_h #include #include namespace math { /** * The TPrinter<> visitor class implements stream printing for * for the expression tree. Use the static printOn method to print. */ template class TPrinter : public TNodeVisitor { private: std::ostream& FStream; TPrinter(std::ostream& AOutput); /// save print takes additionally care about brackets to be printed void savePrint(const TNode *ANode, const TNode *AParent); virtual void visit(TNumberNode *); virtual void visit(TSymbolNode *); virtual void visit(TParamNode *); virtual void visit(TPlusNode *); virtual void visit(TNegNode *); virtual void visit(TMulNode *); virtual void visit(TDivNode *); virtual void visit(TPowNode *); virtual void visit(TSqrtNode *); virtual void visit(TSinNode *); virtual void visit(TCosNode *); virtual void visit(TTanNode *); virtual void visit(TLnNode *); virtual void visit(TFuncNode *); virtual void visit(TIfNode *); virtual void visit(TEquNode *); virtual void visit(TUnEquNode *); virtual void visit(TGreaterNode *); virtual void visit(TLessNode *); virtual void visit(TGreaterEquNode *); virtual void visit(TLessEquNode *); public: /** * printOn prints given expression, AExpr, to the given output stream AOutput. */ static void printOn(std::ostream& AOutput, const TNode *AExpr); /** * print prints given expression, AExpr, into a std::string and returns * its value.
* This is just a wrapper method to printon with std::ostringstream, * but often used. */ static std::string print(const TNode *AExpr); }; } // namespace math #include #endif