ScriptValue.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:3k
- #ifndef f_SYLIA_SCRIPTVALUE_H
- #define f_SYLIA_SCRIPTVALUE_H
- class CScriptArray;
- struct CScriptObject;
- class CScriptValue;
- class IScriptInterpreter;
- class VariableTableEntry;
- typedef CScriptValue (*ScriptObjectLookupFuncPtr)(IScriptInterpreter *, CScriptObject *, void *lpVoid, char *szName);
- typedef CScriptValue (*ScriptFunctionPtr)(IScriptInterpreter *, void *, CScriptValue *, int);
- typedef void (*ScriptVoidFunctionPtr)(IScriptInterpreter *, void *, CScriptValue *, int);
- typedef int (*ScriptIntFunctionPtr)(IScriptInterpreter *, void *, CScriptValue *, int);
- typedef CScriptValue (*ScriptArrayFunctionPtr)(IScriptInterpreter *, void *, int);
- typedef struct ScriptFunctionDef {
- ScriptFunctionPtr func_ptr;
- char *name;
- char *arg_list;
- } ScriptFunctionDef;
- typedef struct ScriptObjectDef {
- char *name;
- CScriptObject *obj;
- } ScriptObjectDef;
- typedef struct CScriptObject {
- ScriptObjectLookupFuncPtr Lookup;
- ScriptFunctionDef *func_list;
- ScriptObjectDef *obj_list;
- } CScriptObject;
- class CScriptValue {
- public:
- enum { T_VOID, T_INT, T_PINT, T_STR, T_ARRAY, T_OBJECT, T_FNAME, T_FUNCTION, T_VARLV } type;
- CScriptObject *thisPtr;
- union {
- int i;
- int *pi;
- char **s;
- ScriptArrayFunctionPtr ary;
- CScriptObject *obj;
- ScriptFunctionPtr func;
- ScriptFunctionDef *fname;
- VariableTableEntry *vte;
- } u;
- void *lpVoid;
- CScriptValue() { type = T_VOID; }
- CScriptValue(int i) { type = T_INT; u.i = i; }
- CScriptValue(int *pi) { type = T_PINT; u.pi = pi; }
- CScriptValue(char **s) { type = T_STR; u.s = s; }
- CScriptValue(CScriptObject *obj) { type = T_OBJECT; u.obj = obj; }
- CScriptValue(CScriptObject *_thisPtr, ScriptArrayFunctionPtr csa) {
- type = T_ARRAY;
- u.ary = csa;
- thisPtr = _thisPtr;
- }
- CScriptValue(CScriptObject *_thisPtr, ScriptFunctionDef *sfd) {
- type = T_FNAME;
- u.fname = sfd;
- thisPtr = _thisPtr;
- }
- CScriptValue(CScriptObject *_thisPtr, ScriptFunctionPtr fn) {
- type = T_FUNCTION;
- u.func = fn;
- thisPtr = _thisPtr;
- }
- CScriptValue(VariableTableEntry *vte) { type = T_VARLV; u.vte = vte; }
- bool isVoid() { return type == T_VOID; }
- bool isInt() { return type == T_INT; }
- bool isString() { return type == T_STR; }
- bool isArray() { return type == T_ARRAY; }
- bool isObject() { return type == T_OBJECT; }
- bool isFName() { return type == T_FNAME; }
- bool isFunction() { return type == T_FUNCTION; }
- bool isVarLV() { return type == T_VARLV; }
- int asInt() { return u.i; }
- char ** asString() { return u.s; }
- ScriptArrayFunctionPtr asArray() { return u.ary; }
- CScriptObject * asObject() { return u.obj; }
- ScriptFunctionPtr asFunction() { return u.func; }
- VariableTableEntry* asVarLV() { return u.vte; }
- };
- #endif