gc.template.h 973 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #ifndef AFUN_GC_TEMPLATE_H
  2. #define AFUN_GC_TEMPLATE_H
  3. #include "gc.h"
  4. namespace aFuncore {
  5. template<class T>
  6. class GcObject : public GcObjectBase {
  7. T *prev;
  8. T *next;
  9. protected:
  10. GcObject() : GcObjectBase(), prev{nullptr}, next{nullptr}{}
  11. public:
  12. void addObject(T *&chain){
  13. if (chain != nullptr) {
  14. next = chain;
  15. chain->prev = dynamic_cast<T *>(this);
  16. }
  17. chain = dynamic_cast<T *>(this);
  18. }
  19. void delObject(T *&chain){
  20. if (next != nullptr)
  21. next->prev = prev;
  22. if (prev == nullptr)
  23. chain = next;
  24. else
  25. prev->next = next;
  26. }
  27. static void destruct(T *&chain){
  28. for (T *tmp = chain, *n; tmp != nullptr; tmp = n) {
  29. n = tmp->next;
  30. delete tmp;
  31. }
  32. }
  33. };
  34. }
  35. #endif //AFUN_GC_TEMPLATE_H