gc.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #ifndef AFUN_GC_H
  2. #define AFUN_GC_H
  3. #include "aFuntool.h"
  4. #include "aFunCoreExport.h"
  5. #include "queue"
  6. namespace aFuncore {
  7. typedef unsigned GcCount;
  8. class AFUN_CORE_EXPORT GcObjectBase {
  9. bool not_clear; // 不清除
  10. bool reachable; // 可达标记 [同时标识已迭代]
  11. GcCount reference; // 引用计数
  12. protected:
  13. GcObjectBase();
  14. virtual ~GcObjectBase() = default;
  15. public:
  16. GcObjectBase(const GcObjectBase &) = delete;
  17. GcObjectBase &operator=(const GcObjectBase &) = delete;
  18. void addReference();
  19. void delReference();
  20. void setClear(bool clear=false);
  21. void setReachable(bool is_reference=false);
  22. };
  23. class AFUN_CORE_EXPORT GcList {
  24. std::queue<GcObjectBase *> queue;
  25. public :
  26. size_t add(GcObjectBase *obj);
  27. GcObjectBase *pop();
  28. [[nodiscard]] size_t getSize() const;
  29. [[nodiscard]] size_t isEmpty() const;
  30. };
  31. };
  32. #include "gc.inline.h"
  33. #include "gc.template.h"
  34. #endif //AFUN_GC_H