obj_api.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * 文件名: obj_api.h
  3. * 目标:
  4. * 1) 定义一些函数签名
  5. * 2) 定义Object的函数签名
  6. *
  7. * 注意: 该文件不包含在object.h中, object.h并不依赖该文件
  8. */
  9. #ifndef AFUN_OBJ_API_H
  10. #define AFUN_OBJ_API_H
  11. #include <iostream>
  12. #include "env.hpp"
  13. #include "object.hpp"
  14. #include "var.hpp"
  15. #include "func.hpp"
  16. #include "gc.hpp"
  17. /* 定义一些函数原型 */
  18. /* API函数 */
  19. typedef void objectAPIFunc(); // 位于object.h (所有Object API函数指针都转换为该类型存储, 注: 具体调用类型参见下文)
  20. /* 顶层信号处理器函数 */
  21. typedef void TopMsgProcessFunc(af_Message *msg, bool is_top, af_Environment *env); // 位于env.h
  22. /* 守护器处理函数 */
  23. typedef af_GuardianList *GuardianFunc(const char *type, bool is_guard, void *data, af_Environment *env);
  24. typedef void GuardianDestruct(const char *type, void *data, af_Environment *env);
  25. /* 回调C函数 */
  26. typedef struct af_CallFuncInfo af_CallFuncInfo;
  27. typedef struct af_FuncBody *callFuncBody(af_CallFuncInfo *info, af_Environment *env); // 位于env.h
  28. /* 定义Object的函数签名 */
  29. /*
  30. * API的第一个参数必须为: id
  31. * API第二个参数通常为: object
  32. * API第三个参数: 通常为void *data [仅与data有关的函数会直接传入该值]
  33. */
  34. #define BASE_ARG const std::string &id, af_Object *obj /* 基础参数 */
  35. /*** Object void *data 管理 ***/
  36. typedef size_t obj_getDataSize(BASE_ARG); // 获取data的大小
  37. typedef void obj_initData(BASE_ARG, void *data, af_Environment *env); // 初始化data
  38. typedef void obj_destructData(BASE_ARG, void *data, af_Environment *env); // 释放data的内容 (但不释放void *data)指针
  39. /*** Object 面向对象管理 ***/
  40. typedef af_VarSpace *obj_getShareVarSpace(BASE_ARG);
  41. /*** Object 函数调用 ***/
  42. /* 获取参数计算表 */
  43. typedef bool obj_funcGetArgCodeList(BASE_ARG, af_ArgCodeList **acl, af_Code *code, void **mark, af_Environment *env);
  44. /* 获取函数变量空间 */
  45. typedef bool obj_funcGetVarList(BASE_ARG, af_VarList **vsl, void *mark, af_Environment *env);
  46. /* 获取参数赋值表 */
  47. typedef bool obj_funcGetArgList(BASE_ARG, af_ArgList **al, af_ArgCodeList *acl, void *mark, af_Environment *env);
  48. /* 获取函数信息 */
  49. typedef bool obj_funcGetInfo(BASE_ARG, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env);
  50. /* 释放mask的函数 */
  51. typedef void obj_funcFreeMask(BASE_ARG, void *mark);
  52. /*** Object 字面量设定 ***/
  53. typedef void obj_literalSetting(BASE_ARG, void *data, char *str, af_Environment *env);
  54. /*** Object 函数管理 ***/
  55. typedef bool obj_isObjFunc(BASE_ARG); // 是否对象函数
  56. typedef bool obj_isInfixFunc(BASE_ARG); // 是否中缀函数
  57. /*** Object gc管理 ***/
  58. typedef af_GcList *obj_getGcList(BASE_ARG, void *data); // 是否对象函数
  59. #undef BASE_ARG
  60. #endif //AFUN_OBJ_API_H