NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
env_value.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_FILE_ENV_ENV_VALUE_HPP__
2#define NEFORCE_CORE_FILE_ENV_ENV_VALUE_HPP__
3
10
14NEFORCE_BEGIN_NAMESPACE__
15
21
26struct env_exception final : value_exception {
27 explicit env_exception(const char* info = "ENV Operation Failed.", const char* type = static_type,
28 const int code = 0) noexcept :
29 value_exception(info, type, code) {}
30
31 explicit env_exception(const exception& e) :
32 value_exception(e) {}
33
34 ~env_exception() override = default;
35 static constexpr auto static_type = "env_exception";
36};
37 // Exceptions
39
45
51
52class env_variable;
53
54
61class NEFORCE_API env_value : public istringify<env_value> {
62public:
67 enum types {
69 };
70
74 virtual ~env_value() = default;
75
80 NEFORCE_NODISCARD virtual types type() const noexcept = 0;
81
86 NEFORCE_NODISCARD virtual const env_variable* as_variable() const noexcept { return nullptr; }
87
92 NEFORCE_NODISCARD bool is_variable() const noexcept { return type() == Variable; }
93
98 NEFORCE_NODISCARD string to_string() const;
99
104 NEFORCE_NODISCARD string to_document() const;
105};
106
107
115class NEFORCE_API env_variable final : public env_value {
116public:
126
127private:
128 string value_;
129 quote_type quote_type_ = None;
130 bool is_exported_ = false;
131
132public:
139 explicit env_variable(string value, const quote_type quote = None, const bool exported = false) noexcept :
140 value_(_NEFORCE move(value)),
141 quote_type_(quote),
142 is_exported_(exported) {}
143
148 NEFORCE_NODISCARD types type() const noexcept override { return Variable; }
149
154 NEFORCE_NODISCARD const env_variable* as_variable() const noexcept override { return this; }
155
160 NEFORCE_NODISCARD const string& get_value() const noexcept { return value_; }
161
166 void set_value(string value) noexcept { value_ = _NEFORCE move(value); }
167
172 NEFORCE_NODISCARD quote_type get_quote_type() const noexcept { return quote_type_; }
173
178 void set_quote_type(const quote_type quote) noexcept { quote_type_ = quote; }
179
184 NEFORCE_NODISCARD bool is_exported() const noexcept { return is_exported_; }
185
190 void set_exported(const bool exported) noexcept { is_exported_ = exported; }
191
197 NEFORCE_NODISCARD int get_int(int default_value = 0) const noexcept;
198
204 NEFORCE_NODISCARD int64_t get_int64(int64_t default_value = 0) const noexcept;
205
211 NEFORCE_NODISCARD double get_double(double default_value = 0.0) const noexcept;
212
218 NEFORCE_NODISCARD bool get_bool(bool default_value = false) const noexcept;
219};
220
221
229class NEFORCE_API env_document final : public istringify<env_document> {
230private:
232 vector<string> comments_;
233
234public:
238 env_document() = default;
239
240 env_document(const env_document&) = delete;
241 env_document& operator=(const env_document&) = delete;
242
247 env_document(env_document&& other) noexcept = default;
248
254 env_document& operator=(env_document&& other) noexcept = default;
255
261 void add_variable(const string& name, unique_ptr<env_variable> variable) {
262 variables_[name] = _NEFORCE move(variable);
263 }
264
272 void set_variable(const string& name, string value, env_variable::quote_type quote = env_variable::None,
273 bool exported = false) {
274 variables_[name] = make_unique<env_variable>(_NEFORCE move(value), quote, exported);
275 }
276
282 NEFORCE_NODISCARD const env_variable* get_variable(const string& name) const {
283 const auto it = variables_.find(name);
284 if (it != variables_.end()) {
285 return it->second.get();
286 }
287 return nullptr;
288 }
289
295 NEFORCE_NODISCARD env_variable* get_variable(const string& name) {
296 const auto it = variables_.find(name);
297 if (it != variables_.end()) {
298 return it->second.get();
299 }
300 return nullptr;
301 }
302
308 NEFORCE_NODISCARD bool has_variable(const string& name) const { return variables_.find(name) != variables_.end(); }
309
314 void remove_variable(const string& name) { variables_.erase(name); }
315
320 NEFORCE_NODISCARD const unordered_map<string, unique_ptr<env_variable>>& get_variables() const noexcept {
321 return variables_;
322 }
323
328 void add_comment(string comment) noexcept { comments_.emplace_back(move(comment)); }
329
334 NEFORCE_NODISCARD const vector<string>& get_comments() const noexcept { return comments_; }
335
342 NEFORCE_NODISCARD string get_string(const string& name, const string& default_value = "") const {
343 const auto* var = get_variable(name);
344 return var ? var->get_value() : default_value;
345 }
346
353 NEFORCE_NODISCARD int get_int(const string& name, const int default_value = 0) const {
354 const auto* var = get_variable(name);
355 return var ? var->get_int(default_value) : default_value;
356 }
357
364 NEFORCE_NODISCARD int64_t get_int64(const string& name, const int64_t default_value = 0) const {
365 const auto* var = get_variable(name);
366 return var ? var->get_int64(default_value) : default_value;
367 }
368
375 NEFORCE_NODISCARD double get_double(const string& name, const double default_value = 0.0) const {
376 const auto* var = get_variable(name);
377 return var ? var->get_double(default_value) : default_value;
378 }
379
386 NEFORCE_NODISCARD bool get_bool(const string& name, const bool default_value = false) const {
387 const auto* var = get_variable(name);
388 return var ? var->get_bool(default_value) : default_value;
389 }
390
395 NEFORCE_NODISCARD string to_string() const;
396};
397 // EnvConfig
399 // ConfigFormat
401
402NEFORCE_END_NAMESPACE__
403#endif // NEFORCE_CORE_FILE_ENV_ENV_VALUE_HPP__
NEFORCE_NODISCARD int64_t get_int64(const string &name, const int64_t default_value=0) const
获取64位整数值
NEFORCE_NODISCARD const env_variable * get_variable(const string &name) const
获取常量变量指针
NEFORCE_NODISCARD string to_string() const
转换为字符串
NEFORCE_NODISCARD string get_string(const string &name, const string &default_value="") const
获取字符串值
NEFORCE_NODISCARD double get_double(const string &name, const double default_value=0.0) const
获取双精度浮点值
void remove_variable(const string &name)
移除变量
env_document()=default
默认构造函数
env_document & operator=(env_document &&other) noexcept=default
移动赋值运算符
void add_comment(string comment) noexcept
添加注释
env_document(env_document &&other) noexcept=default
移动构造函数
NEFORCE_NODISCARD bool get_bool(const string &name, const bool default_value=false) const
获取布尔值
void set_variable(const string &name, string value, env_variable::quote_type quote=env_variable::None, bool exported=false)
设置变量
NEFORCE_NODISCARD bool has_variable(const string &name) const
检查变量是否存在
NEFORCE_NODISCARD env_variable * get_variable(const string &name)
获取变量指针
NEFORCE_NODISCARD const unordered_map< string, unique_ptr< env_variable > > & get_variables() const noexcept
获取所有变量的常量引用
NEFORCE_NODISCARD const vector< string > & get_comments() const noexcept
获取所有注释
NEFORCE_NODISCARD int get_int(const string &name, const int default_value=0) const
获取整数值
void add_variable(const string &name, unique_ptr< env_variable > variable)
添加变量
环境值抽象基类
virtual NEFORCE_NODISCARD const env_variable * as_variable() const noexcept
转换为环境变量指针
NEFORCE_NODISCARD string to_document() const
转换为文档字符串
types
环境值类型枚举
@ Variable
变量类型
virtual NEFORCE_NODISCARD types type() const noexcept=0
获取环境值类型
NEFORCE_NODISCARD string to_string() const
转换为字符串
NEFORCE_NODISCARD bool is_variable() const noexcept
判断是否为变量类型
virtual ~env_value()=default
虚析构函数
环境变量类
NEFORCE_NODISCARD const string & get_value() const noexcept
获取变量值
NEFORCE_NODISCARD const env_variable * as_variable() const noexcept override
转换为环境变量指针
void set_exported(const bool exported) noexcept
设置导出标记
NEFORCE_NODISCARD int get_int(int default_value=0) const noexcept
获取整数值
quote_type
引号类型枚举
NEFORCE_NODISCARD bool get_bool(bool default_value=false) const noexcept
获取布尔值
env_variable(string value, const quote_type quote=None, const bool exported=false) noexcept
构造函数
void set_quote_type(const quote_type quote) noexcept
设置引号类型
NEFORCE_NODISCARD types type() const noexcept override
获取类型
NEFORCE_NODISCARD int64_t get_int64(int64_t default_value=0) const noexcept
获取64位整数值
NEFORCE_NODISCARD bool is_exported() const noexcept
检查是否导出
NEFORCE_NODISCARD quote_type get_quote_type() const noexcept
获取引号类型
NEFORCE_NODISCARD double get_double(double default_value=0.0) const noexcept
获取双精度浮点值
void set_value(string value) noexcept
设置变量值
独占智能指针
无序映射容器
动态大小数组容器
long long int64_t
64位有符号整数类型
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
NEFORCE_ALWAYS_INLINE_INLINE bool name(char *buffer, size_t size)
获取当前线程名称
NEFORCE_CONSTEXPR20 unique_ptr< T > make_unique(Args &&... args)
创建unique_ptr
可字符串化接口
exception(const char *info=static_type, const char *type=static_type, const int code=0)
构造函数
NEFORCE_NODISCARD int code() const noexcept
获取异常码
NEFORCE_NODISCARD const char * type() const noexcept
获取异常类型
可字符串化接口
独占智能指针
无序映射容器