12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #ifndef AFUN_GC_H
- #define AFUN_GC_H
- #include "aFuntool.h"
- #include "aFunCoreExport.h"
- #include "queue"
- namespace aFuncore {
- typedef unsigned GcCount;
- class AFUN_CORE_EXPORT GcObjectBase {
- bool not_clear; // 不清除
- bool reachable; // 可达标记 [同时标识已迭代]
- GcCount reference; // 引用计数
- protected:
- GcObjectBase();
- virtual ~GcObjectBase() = default;
- public:
- GcObjectBase(const GcObjectBase &) = delete;
- GcObjectBase &operator=(const GcObjectBase &) = delete;
- void addReference();
- void delReference();
- void setClear(bool clear=false);
- void setReachable(bool is_reference=false);
- };
- class AFUN_CORE_EXPORT GcList {
- std::queue<GcObjectBase *> queue;
- public :
- size_t add(GcObjectBase *obj);
- GcObjectBase *pop();
- [[nodiscard]] size_t getSize() const;
- [[nodiscard]] size_t isEmpty() const;
- };
- };
- #include "gc.inline.h"
- #include "gc.template.h"
- #endif //AFUN_GC_H
|