core_environment.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #ifndef AFUN_CORE_ENVIRONMENT_H
  2. #define AFUN_CORE_ENVIRONMENT_H
  3. #include <list>
  4. #include <mutex>
  5. #include "aFunCoreExport.h"
  6. #include "aFuntool.h"
  7. #include "core_env_var.h"
  8. #include "core_activation.h"
  9. #include "core_object.h"
  10. namespace aFuncore {
  11. class Inter;
  12. class AFUN_CORE_EXPORT Environment {
  13. friend class Object;
  14. friend class Inter;
  15. public:
  16. explicit Environment(int argc = 0, char **argv = nullptr);
  17. ~Environment() noexcept(false);
  18. Environment(Environment &) = delete;
  19. Environment &operator=(Environment &) = delete;
  20. AFUN_INLINE size_t operator++();
  21. AFUN_INLINE size_t operator--();
  22. AFUN_INLINE size_t operator++(int);
  23. AFUN_INLINE size_t operator--(int);
  24. [[nodiscard]] AFUN_INLINE EnvVarSpace &getEnvVarSpace();
  25. private:
  26. std::mutex lock;
  27. size_t reference; // 引用计数
  28. bool destruct;
  29. std::list<Object *> gc;
  30. Inter &gc_inter; /* 需要在lock和reference后初始化 */
  31. std::thread gc_thread;
  32. void gcThread();
  33. protected: // 位于 mutex 之下
  34. EnvVarSpace &env_var;
  35. };
  36. }
  37. #include "core_environment.inline.h"
  38. #endif //AFUN_CORE_ENVIRONMENT_H