ppsspp/Common/Math/expression_parser.h

30 lines
989 B
C
Raw Normal View History

2013-07-01 01:31:47 +02:00
#pragma once
#include <cstdint>
2013-07-01 01:31:47 +02:00
#include <vector>
typedef std::pair<uint32_t, uint32_t> ExpressionPair;
2013-07-01 01:31:47 +02:00
typedef std::vector<ExpressionPair> PostfixExpression;
enum ExpressionType
{
EXPR_TYPE_UINT = 0,
EXPR_TYPE_FLOAT = 2,
};
2013-07-01 01:31:47 +02:00
class IExpressionFunctions
{
public:
virtual ~IExpressionFunctions() {}
virtual bool parseReference(char* str, uint32_t& referenceIndex) = 0;
virtual bool parseSymbol(char* str, uint32_t& symbolValue) = 0;
virtual uint32_t getReferenceValue(uint32_t referenceIndex) = 0;
virtual ExpressionType getReferenceType(uint32_t referenceIndex) = 0;
virtual bool getMemoryValue(uint32_t address, int size, uint32_t& dest, char* error) = 0;
2013-07-01 01:31:47 +02:00
};
2013-08-26 18:59:08 +02:00
bool initPostfixExpression(const char* infix, IExpressionFunctions* funcs, PostfixExpression& dest);
bool parsePostfixExpression(PostfixExpression& exp, IExpressionFunctions* funcs, uint32_t& dest);
bool parseExpression(const char* exp, IExpressionFunctions* funcs, uint32_t& dest);
2013-07-01 01:31:47 +02:00
const char* getExpressionError();