1 /***************************************************************************** 2 * expr_evaluator.hpp 3 ***************************************************************************** 4 * Copyright (C) 2004 the VideoLAN team 5 * $Id: 7bf2a0d313b7e645e475cb3338c2b4489af9a262 $ 6 * 7 * Authors: Cyril Deguet <asmax@via.ecp.fr> 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License along 20 * with this program; if not, write to the Free Software Foundation, Inc., 21 * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. 22 *****************************************************************************/ 23 24 #ifndef EXPR_EVALUATOR_HPP 25 #define EXPR_EVALUATOR_HPP 26 27 #include "../src/skin_common.hpp" 28 #include <list> 29 #include <string> 30 31 /// Expression evaluator using Reverse Polish Notation 32 class ExprEvaluator: public SkinObject 33 { 34 public: ExprEvaluator(intf_thread_t * pIntf)35 ExprEvaluator( intf_thread_t *pIntf ): SkinObject( pIntf ) { } ~ExprEvaluator()36 ~ExprEvaluator() { } 37 38 /// Clear the RPN stack and parse an expression 39 void parse( const std::string &rExpr ); 40 41 /// Pop the first token from the RPN stack. 42 /// Return NULL when the stack is empty. 43 std::string getToken(); 44 45 private: 46 /// RPN stack 47 std::list<std::string> m_stack; 48 49 /// Returns true if op1 has precedency over op2 50 bool hasPrecedency( const std::string &op1, const std::string &op2 ) const; 51 }; 52 53 #endif 54