2
0

rt_varspace_object.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #ifndef AFUN_VARSPACE_OBJECT_H
  2. #define AFUN_VARSPACE_OBJECT_H
  3. #include <list>
  4. #include "aFunRuntimeExport.h"
  5. #include "aFuncore.h"
  6. #include "rt_var_object.h"
  7. namespace aFunrt {
  8. class AFUN_RT_EXPORT VarSpace : public aFuncore::Object {
  9. public:
  10. typedef enum VarOperationFlat {
  11. vof_success = 0, // 成功
  12. vof_not_var = 1, // 变量不存在
  13. vof_redefine_var = 2, // 变量重复定义
  14. vof_fail = 3, // 存在其他错误
  15. } VarOperationFlat;
  16. aFuncore::Environment &env;
  17. explicit VarSpace(aFuncore::Inter &inter);
  18. explicit VarSpace(aFuncore::Environment &env_);
  19. ~VarSpace() override = default;
  20. template <typename Callable,typename...T>
  21. void forEach(Callable func, T...arg);
  22. template <typename Callable,typename...T>
  23. void forEachLock(Callable func, T...arg);
  24. [[nodiscard]] AFUN_INLINE size_t getCount();
  25. [[nodiscard]] virtual Var *findVar(const std::string &name);
  26. virtual VarOperationFlat defineVar(const std::string &name, aFuncore::Object *data);
  27. virtual VarOperationFlat defineVar(const std::string &name, Var *data);
  28. virtual VarOperationFlat setVar(const std::string &name, aFuncore::Object *data);
  29. virtual VarOperationFlat delVar(const std::string &name);
  30. [[nodiscard]] AFUN_INLINE aFuncore::Object *findObject(const std::string &name);
  31. void linkObject(std::queue<aFuncore::Object *> &queue) override;
  32. AFUN_STATIC const size_t VAR_HASH_SIZE = 100; // 环境变量哈希表大小
  33. private:
  34. std::unordered_map<std::string, Var *> var;
  35. };
  36. }
  37. #include "rt_varspace_object.inline.h"
  38. #include "rt_varspace_object.template.h"
  39. #endif //AFUN_VARSPACE_OBJECT_H