var.h 2.8 KB

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