00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef FXEXPRESSION_H
00025 #define FXEXPRESSION_H
00026
00027
00028 namespace FX {
00029
00030
00032 enum FXExpressionError {
00033 EXPRERR_OK,
00034 EXPRERR_EMPTY,
00035 EXPRERR_MEMORY,
00036 EXPRERR_PAREN,
00037 EXPRERR_TOKEN,
00038 EXPRERR_COMMA,
00039 EXPRERR_IDENT
00040 };
00041
00042
00044 class FXAPI FXExpression {
00045 private:
00046 FXuchar *code;
00047 private:
00048 static const FXuchar initial[];
00049 static const FXchar *const errors[];
00050 public:
00051
00053 FXExpression();
00054
00056 FXExpression(const FXExpression& orig);
00057
00059 FXExpression(const FXchar* expression,const FXchar* variables=NULL,FXExpressionError* error=NULL);
00060
00062 FXExpression(const FXString& expression,const FXString& variables=FXString::null,FXExpressionError* error=NULL);
00063
00065 FXExpression& operator=(const FXExpression& orig);
00066
00068 bool empty() const { return (code==initial); }
00069
00071 FXdouble evaluate(const FXdouble *args=NULL);
00072
00074 FXExpressionError parse(const FXchar* expression,const FXchar* variables=NULL);
00075
00077 FXExpressionError parse(const FXString& expression,const FXString& variables=FXString::null);
00078
00080 static const FXchar* getError(FXExpressionError err){ return errors[err]; }
00081
00083 ~FXExpression();
00084 };
00085
00086 }
00087
00088 #endif