#pragma once #include "enginedata.h" #include "query.h" #include #include #include struct Script; struct Query; enum ExprNodeType { EFN_ADD=0, EFN_SUBTRACT, EFN_MULTIPLY, EFN_DIVIDE, EFN_MODULO, EFN_EQUAL, EFN_UNEQUAL, EFN_LESS, EFN_GREATER, EFN_LESSEQUAL, EFN_GREATEREQUAL, EFN_AND, EFN_OR, EFN_NOT, //1 arg EFN_MAX, EFN_MIN, EFN_NUMBER, EFN_VARIABLE, //0 arg EFN_INVALID //invalid }; bool validateExprNodeType(ExprNodeType); struct Expression { ExprNodeType type; vector args; int intval; string varname; int evaluate(unordered_map&); }; enum ScriptLineType { SLT_QUERYSTUB, SLT_IF, SLT_WHILE, SLT_ASSIGNMENT }; struct ScriptLine { ScriptLineType type; string *querystub=NULL; string *destvar=NULL; Expression *expr=NULL; Script *block=NULL; ~ScriptLine(void); vector execute(map&,unordered_map&); }; struct Script { vector lines; vector execute(map&); vector execute(map&,unordered_map&); }; //just hands over pointer, CALLING FUNCTION TAKES OWNERSHIP Query* resolveQueryStub(const string &stub,map&,unordered_map&);