2
0

gc.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #ifndef AFUN_GC
  2. #define AFUN_GC
  3. #include "aFunCoreExport.h"
  4. #include "object.h"
  5. #include "var.h"
  6. typedef uint32_t GcCount;
  7. typedef struct af_GcList af_GcList;
  8. enum af_GcListType {
  9. glt_obj = 1,
  10. glt_vs,
  11. glt_var,
  12. glt_vsl,
  13. };
  14. /* gc 引用计数管理函数 */
  15. #define gc_addReference(obj) ((_Generic((obj), \
  16. af_Object *:gc_addObjectReference, \
  17. af_Var *: gc_addVarReference, \
  18. af_VarSpace *: gc_addVarSpaceReference))(obj))
  19. #define gc_delReference(obj) ((_Generic((obj), \
  20. af_Object *: gc_delObjectReference, \
  21. af_Var *: gc_delVarReference, \
  22. af_VarSpace *: gc_delVarSpaceReference))(obj))
  23. #define gc_getReference(obj) ((_Generic((obj), \
  24. af_Object *: gc_getObjectReference, \
  25. af_Var *: gc_getVarReference, \
  26. af_VarSpace *: gc_getVarSpaceReference))(obj))
  27. /* GcList 创建与释放 */
  28. AFUN_CORE_EXPORT af_GcList *makeGcList(enum af_GcListType type, void *data);
  29. AFUN_CORE_EXPORT void freeAllGcList(af_GcList *gl);
  30. /* GcList 相关操作 */
  31. AFUN_CORE_EXPORT af_GcList *pushGcList(enum af_GcListType type, void *data, af_GcList *base);
  32. /* gc Reference 相关操作 */
  33. AFUN_CORE_EXPORT void gc_addObjectReference(af_Object *obj);
  34. AFUN_CORE_EXPORT void gc_addVarReference(af_Var *obj);
  35. AFUN_CORE_EXPORT void gc_addVarSpaceReference(af_VarSpace *obj);
  36. AFUN_CORE_EXPORT void gc_delObjectReference(af_Object *obj);
  37. AFUN_CORE_EXPORT void gc_delVarReference(af_Var *obj);
  38. AFUN_CORE_EXPORT void gc_delVarSpaceReference(af_VarSpace *obj);
  39. /* gc Reference 属性访问 */
  40. AFUN_CORE_EXPORT GcCount gc_getObjectReference(af_Object *obj);
  41. AFUN_CORE_EXPORT GcCount gc_getVarReference(af_Var *obj);
  42. AFUN_CORE_EXPORT GcCount gc_getVarSpaceReference(af_VarSpace *obj);
  43. #endif //AFUN_GC