env-var.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #ifndef AFUN_ENV_VAR_H
  2. #define AFUN_ENV_VAR_H
  3. #include "aFuntool.h"
  4. #include "aFunCoreExport.h"
  5. #include "shared_mutex"
  6. namespace aFuncore {
  7. class AFUN_CORE_EXPORT EnvVarSpace { // 环境变量
  8. public:
  9. EnvVarSpace();
  10. ~EnvVarSpace();
  11. EnvVarSpace(const EnvVarSpace &)=delete;
  12. EnvVarSpace &operator=(const EnvVarSpace &)=delete;
  13. [[nodiscard]] inline size_t getCount() const;
  14. bool findString(const std::string &name, std::string &str) const;
  15. bool findNumber(const std::string &name, int32_t &num) const;
  16. void setString(const std::string &name, const std::string &str);
  17. void setNumber(const std::string &name, int32_t num);
  18. void addString(const std::string &name, const std::string &str);
  19. void addNumber(const std::string &name, int32_t num);
  20. private:
  21. static const size_t ENV_VAR_HASH_SIZE = 100; // 环境变量哈希表大小
  22. struct EnvVar;
  23. size_t count;
  24. EnvVar *var[ENV_VAR_HASH_SIZE] {};
  25. std::shared_mutex lock;
  26. };
  27. struct EnvVarSpace::EnvVar { // 环境变量
  28. std::string name;
  29. std::string str;
  30. int32_t num = 0; // 可以同时记录字符串和数字
  31. struct EnvVar *next = nullptr;
  32. };
  33. }
  34. #include "env-var.inline.h"
  35. #endif //AFUN_ENV_VAR_H