2
0

var.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #ifndef AFUN_VAR_H
  2. #define AFUN_VAR_H
  3. #include "aFuntool.h"
  4. #include "aFunCoreExport.h"
  5. #include "core.h"
  6. #include "gc.h"
  7. #include <list>
  8. namespace aFuncore {
  9. class AFUN_CORE_EXPORT Var : public GcObject<class Var> {
  10. public:
  11. Inter &inter;
  12. Var(Object *data_, Inter &inter_);
  13. ~Var() override = default;
  14. [[nodiscard]] inline virtual Object *getData();
  15. virtual void inline setData(Object *data_);
  16. private:
  17. Object *data;
  18. };
  19. class AFUN_CORE_EXPORT VarSpace : public GcObject<class VarSpace> {
  20. public:
  21. Inter &inter;
  22. explicit VarSpace(Inter &inter_);
  23. ~VarSpace() override;
  24. template <typename Callable,typename...T>
  25. void forEach(Callable func, T...arg);
  26. [[nodiscard]] inline size_t getCount() const;
  27. [[nodiscard]] virtual Var *findVar(const std::string &name);
  28. virtual VarOperationFlat defineVar(const std::string &name, Object *data);
  29. virtual VarOperationFlat defineVar(const std::string &name, Var *data);
  30. virtual VarOperationFlat setVar(const std::string &name, Object *data);
  31. virtual VarOperationFlat delVar(const std::string &name);
  32. [[nodiscard]] Object *findObject(const std::string &name);
  33. static const size_t VAR_HASH_SIZE = 100; // 环境变量哈希表大小
  34. private:
  35. struct VarCup {
  36. std::string name;
  37. Var *var;
  38. VarCup *next=nullptr;
  39. };
  40. size_t count;
  41. VarCup *var[VAR_HASH_SIZE];
  42. };
  43. class AFUN_CORE_EXPORT ProtectVarSpace : public VarSpace {
  44. public:
  45. explicit inline ProtectVarSpace(Inter &inter_);
  46. [[nodiscard]] inline bool getProtect() const;
  47. inline bool setProtect(bool protect);
  48. VarOperationFlat defineVar(const std::string &name, Object *data) override;
  49. VarOperationFlat defineVar(const std::string &name, Var *data) override;
  50. VarOperationFlat setVar(const std::string &name, Object *data) override;
  51. VarOperationFlat delVar(const std::string &name) override;
  52. private:
  53. bool is_protect;
  54. };
  55. class AFUN_CORE_EXPORT VarList {
  56. public:
  57. explicit inline VarList() = default;
  58. explicit VarList(VarList *varlist);
  59. explicit VarList(VarSpace *varspace);
  60. ~VarList() = default;
  61. VarList(const VarList &) = delete;
  62. VarList &operator=(const VarList &) = delete;
  63. void connect(VarList *varlist);
  64. inline void push(VarSpace *varspace_);
  65. template <typename Callable,typename...T>
  66. void forEach(Callable func, T...arg);
  67. [[nodiscard]] virtual Var *findVar(const std::string &name);
  68. virtual bool defineVar(const std::string &name, Object *data);
  69. virtual bool defineVar(const std::string &name, Var *data);
  70. virtual bool setVar(const std::string &name, Object *data);
  71. virtual bool delVar(const std::string &name);
  72. [[nodiscard]] inline Object *findObject(const std::string &name);
  73. private:
  74. std::list<VarSpace *> varspace;
  75. };
  76. }
  77. #include "var.inline.h"
  78. #include "var.template.h"
  79. #endif //AFUN_VAR_H