|
@@ -1,25 +1,5 @@
|
|
|
#include "env-var.h"
|
|
|
namespace aFuncore {
|
|
|
-
|
|
|
- /**
|
|
|
- * 创建环境变量
|
|
|
- */
|
|
|
- EnvVarSpace::EnvVarSpace() : count{0}{
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 释放全部环境变量
|
|
|
- */
|
|
|
- EnvVarSpace::~EnvVarSpace(){
|
|
|
- for (auto &i: var) {
|
|
|
- for (EnvVar *tmp = i, *next; tmp != nullptr; tmp = next) {
|
|
|
- next = tmp->next;
|
|
|
- delete tmp;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 获取环境变量文本
|
|
|
* @param name 变量名
|
|
@@ -27,14 +7,13 @@ namespace aFuncore {
|
|
|
* @return 是否成功
|
|
|
*/
|
|
|
bool EnvVarSpace::findString(const std::string &name, std::string &str) const{
|
|
|
- size_t index = aFuntool::time33(name) % ENV_VAR_HASH_SIZE;
|
|
|
- for (auto tmp = var[index]; tmp != nullptr; tmp = tmp->next) {
|
|
|
- if (name == tmp->name) {
|
|
|
- str = tmp->str;
|
|
|
- return true;
|
|
|
- }
|
|
|
+ try {
|
|
|
+ auto &env_var = var.at(name);
|
|
|
+ str = env_var.str;
|
|
|
+ return true;
|
|
|
+ } catch (std::out_of_range &) {
|
|
|
+ return false;
|
|
|
}
|
|
|
- return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -44,14 +23,13 @@ namespace aFuncore {
|
|
|
* @return 是否成功
|
|
|
*/
|
|
|
bool EnvVarSpace::findNumber(const std::string &name, int32_t &num) const{
|
|
|
- size_t index = aFuntool::time33(name) % ENV_VAR_HASH_SIZE;
|
|
|
- for (auto tmp = var[index]; tmp != nullptr; tmp = tmp->next) {
|
|
|
- if (name == tmp->name) {
|
|
|
- num = tmp->num;
|
|
|
- return true;
|
|
|
- }
|
|
|
+ try {
|
|
|
+ auto &env_var = var.at(name);
|
|
|
+ num = env_var.num;
|
|
|
+ return true;
|
|
|
+ } catch (std::out_of_range &) {
|
|
|
+ return false;
|
|
|
}
|
|
|
- return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -60,18 +38,12 @@ namespace aFuncore {
|
|
|
* @param str 文本
|
|
|
*/
|
|
|
void EnvVarSpace::setString(const std::string &name, const std::string &str){
|
|
|
- size_t index = aFuntool::time33(name) % ENV_VAR_HASH_SIZE;
|
|
|
- auto tmp = &var[index];
|
|
|
- for (NULL; *tmp != nullptr; tmp = &((*tmp)->next)) {
|
|
|
- if (name == (*tmp)->name) {
|
|
|
- (*tmp)->str = str;
|
|
|
- return;
|
|
|
- }
|
|
|
+ try {
|
|
|
+ auto &env_var = var.at(name);
|
|
|
+ env_var.str = str;
|
|
|
+ } catch (std::out_of_range &) {
|
|
|
+ var.insert({name, {str, 0}});
|
|
|
}
|
|
|
-
|
|
|
- (*tmp) = new EnvVar;
|
|
|
- (*tmp)->name = name;
|
|
|
- (*tmp)->str = str;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -80,57 +52,39 @@ namespace aFuncore {
|
|
|
* @param num 数值
|
|
|
*/
|
|
|
void EnvVarSpace::setNumber(const std::string &name, int32_t num){
|
|
|
- size_t index = aFuntool::time33(name) % ENV_VAR_HASH_SIZE;
|
|
|
- auto tmp = &var[index];
|
|
|
- for (NULL; *tmp != nullptr; tmp = &((*tmp)->next)) {
|
|
|
- if (name == (*tmp)->name) {
|
|
|
- (*tmp)->num = num;
|
|
|
- return;
|
|
|
- }
|
|
|
+ try {
|
|
|
+ auto &env_var = var.at(name);
|
|
|
+ env_var.num = num;
|
|
|
+ } catch (std::out_of_range &) {
|
|
|
+ var.insert({name, {"", num}});
|
|
|
}
|
|
|
-
|
|
|
- (*tmp) = new EnvVar;
|
|
|
- (*tmp)->name = name;
|
|
|
- (*tmp)->num = num;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 设置环境变量文本
|
|
|
+ * 设置环境变量文本 (加法)
|
|
|
* @param name 变量名
|
|
|
* @param str 文本
|
|
|
*/
|
|
|
void EnvVarSpace::addString(const std::string &name, const std::string &str){
|
|
|
- size_t index = aFuntool::time33(name) % ENV_VAR_HASH_SIZE;
|
|
|
- auto tmp = &var[index];
|
|
|
- for (NULL; *tmp != nullptr; tmp = &((*tmp)->next)) {
|
|
|
- if (name == (*tmp)->name) {
|
|
|
- (*tmp)->str += str;
|
|
|
- return;
|
|
|
- }
|
|
|
+ try {
|
|
|
+ auto &env_var = var.at(name);
|
|
|
+ env_var.str += str;
|
|
|
+ } catch (std::out_of_range &) {
|
|
|
+ var.insert({name, {str, 0}});
|
|
|
}
|
|
|
-
|
|
|
- (*tmp) = new EnvVar;
|
|
|
- (*tmp)->name = name;
|
|
|
- (*tmp)->str = str;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 设置环境变量数值
|
|
|
+ * 设置环境变量数值 (加法)
|
|
|
* @param name 变量名
|
|
|
* @param num 数值
|
|
|
*/
|
|
|
void EnvVarSpace::addNumber(const std::string &name, int32_t num){
|
|
|
- size_t index = aFuntool::time33(name) % ENV_VAR_HASH_SIZE;
|
|
|
- auto tmp = &var[index];
|
|
|
- for (NULL; *tmp != nullptr; tmp = &((*tmp)->next)) {
|
|
|
- if (name == (*tmp)->name) {
|
|
|
- (*tmp)->num += num;
|
|
|
- return;
|
|
|
- }
|
|
|
+ try {
|
|
|
+ auto &env_var = var.at(name);
|
|
|
+ env_var.num += num;
|
|
|
+ } catch (std::out_of_range &) {
|
|
|
+ var.insert({name, {"", num}});
|
|
|
}
|
|
|
-
|
|
|
- (*tmp) = new EnvVar;
|
|
|
- (*tmp)->name = name;
|
|
|
- (*tmp)->num = num;
|
|
|
}
|
|
|
}
|