ScriptValue.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:3k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. #ifndef f_SYLIA_SCRIPTVALUE_H
  2. #define f_SYLIA_SCRIPTVALUE_H
  3. class CScriptArray;
  4. struct CScriptObject;
  5. class CScriptValue;
  6. class IScriptInterpreter;
  7. class VariableTableEntry;
  8. typedef CScriptValue (*ScriptObjectLookupFuncPtr)(IScriptInterpreter *, CScriptObject *, void *lpVoid, char *szName);
  9. typedef CScriptValue (*ScriptFunctionPtr)(IScriptInterpreter *, void *, CScriptValue *, int);
  10. typedef void (*ScriptVoidFunctionPtr)(IScriptInterpreter *, void *, CScriptValue *, int);
  11. typedef int (*ScriptIntFunctionPtr)(IScriptInterpreter *, void *, CScriptValue *, int);
  12. typedef CScriptValue (*ScriptArrayFunctionPtr)(IScriptInterpreter *, void *, int);
  13. typedef struct ScriptFunctionDef {
  14. ScriptFunctionPtr func_ptr;
  15. char *name;
  16. char *arg_list;
  17. } ScriptFunctionDef;
  18. typedef struct ScriptObjectDef {
  19. char *name;
  20. CScriptObject *obj;
  21. } ScriptObjectDef;
  22. typedef struct CScriptObject {
  23. ScriptObjectLookupFuncPtr Lookup;
  24. ScriptFunctionDef *func_list;
  25. ScriptObjectDef *obj_list;
  26. } CScriptObject;
  27. class CScriptValue {
  28. public:
  29. enum { T_VOID, T_INT, T_PINT, T_STR, T_ARRAY, T_OBJECT, T_FNAME, T_FUNCTION, T_VARLV } type;
  30. CScriptObject *thisPtr;
  31. union {
  32. int i;
  33. int *pi;
  34. char **s;
  35. ScriptArrayFunctionPtr ary;
  36. CScriptObject *obj;
  37. ScriptFunctionPtr func;
  38. ScriptFunctionDef *fname;
  39. VariableTableEntry *vte;
  40. } u;
  41. void *lpVoid;
  42. CScriptValue() { type = T_VOID; }
  43. CScriptValue(int i) { type = T_INT; u.i = i; }
  44. CScriptValue(int *pi) { type = T_PINT; u.pi = pi; }
  45. CScriptValue(char **s) { type = T_STR; u.s = s; }
  46. CScriptValue(CScriptObject *obj) { type = T_OBJECT; u.obj = obj; }
  47. CScriptValue(CScriptObject *_thisPtr, ScriptArrayFunctionPtr csa) {
  48. type = T_ARRAY;
  49. u.ary = csa;
  50. thisPtr = _thisPtr;
  51. }
  52. CScriptValue(CScriptObject *_thisPtr, ScriptFunctionDef *sfd) {
  53. type = T_FNAME;
  54. u.fname = sfd;
  55. thisPtr = _thisPtr;
  56. }
  57. CScriptValue(CScriptObject *_thisPtr, ScriptFunctionPtr fn) {
  58. type = T_FUNCTION;
  59. u.func = fn;
  60. thisPtr = _thisPtr;
  61. }
  62. CScriptValue(VariableTableEntry *vte) { type = T_VARLV; u.vte = vte; }
  63. bool isVoid() { return type == T_VOID; }
  64. bool isInt() { return type == T_INT; }
  65. bool isString() { return type == T_STR; }
  66. bool isArray() { return type == T_ARRAY; }
  67. bool isObject() { return type == T_OBJECT; }
  68. bool isFName() { return type == T_FNAME; }
  69. bool isFunction() { return type == T_FUNCTION; }
  70. bool isVarLV() { return type == T_VARLV; }
  71. int asInt() { return u.i; }
  72. char ** asString() { return u.s; }
  73. ScriptArrayFunctionPtr asArray() { return u.ary; }
  74. CScriptObject * asObject() { return u.obj; }
  75. ScriptFunctionPtr asFunction() { return u.func; }
  76. VariableTableEntry* asVarLV() { return u.vte; }
  77. };
  78. #endif