pull/15/head
heureux 12 months ago
parent 9bc075c78e
commit b5a5b7dd0d

@ -3,11 +3,11 @@
namespace easypr { namespace easypr {
Kv::Kv() { } Kv::Kv() { } //Kv类的构造函数
void Kv::load(const std::string &file) { void Kv::load(const std::string &file) { //一个成员函数,用于从指定的文件中加载键值对
this->clear(); this->clear();//清空当前的键值对
std::ifstream reader(file); std::ifstream reader(file);//打开文件
assert(reader); assert(reader);
if (reader.is_open()) { if (reader.is_open()) {
@ -15,17 +15,17 @@ void Kv::load(const std::string &file) {
std::string line; std::string line;
std::getline(reader, line); std::getline(reader, line);
if (line.empty()) continue; if (line.empty()) continue;
//打开文件并读取每一行
const auto parse = [](const std::string &str) { const auto parse = [](const std::string &str) {//解析键和值
std::string tmp, key, value; std::string tmp, key, value;
for (size_t i = 0, len = str.length(); i < len; ++i) { for (size_t i = 0, len = str.length(); i < len; ++i) {
const char ch = str[i]; const char ch = str[i];
if (ch == ' ') { if (ch == ' ') {//遇到空格时
if (i > 0 && str[i - 1] != ' ' && key.empty()) { if (i > 0 && str[i - 1] != ' ' && key.empty()) {
key = tmp; key = tmp;
tmp.clear(); tmp.clear();
} }
} }//将之前的字符串作为键,空格后的字符串作为值
else { else {
tmp.push_back(ch); tmp.push_back(ch);
} }
@ -37,45 +37,45 @@ void Kv::load(const std::string &file) {
}; };
auto kv = parse(line); auto kv = parse(line);
this->add(kv.first, kv.second); this->add(kv.first, kv.second);//解析出的键值对添加到存储中
} }
reader.close(); reader.close();//关闭文件
} }
} }
std::string Kv::get(const std::string &key) { std::string Kv::get(const std::string &key) {//是一个成员函数,用于获取给定键的值
if (data_.find(key) == data_.end()) { if (data_.find(key) == data_.end()) {
std::cerr << "[Kv] cannot find " << key << std::endl; std::cerr << "[Kv] cannot find " << key << std::endl;//如果键不存在,它会打印一个错误消息
return ""; return "";//返回一个空字符串。
} }
return data_.at(key); return data_.at(key);//获取给定键的值
} }
void Kv::add(const std::string &key, const std::string &value) { void Kv::add(const std::string &key, const std::string &value) {//是一个成员函数,用于添加一个键值对
if (data_.find(key) != data_.end()) { if (data_.find(key) != data_.end()) {//如果键已经存在
fprintf(stderr, fprintf(stderr,
"[Kv] find duplicate: %s = %s , ignore\n", "[Kv] find duplicate: %s = %s , ignore\n",
key.c_str(), key.c_str(),
value.c_str()); value.c_str());//会打印一个错误消息并忽略这个添加操作
} else { } else {
std::string v(value); std::string v(value);
#ifdef OS_WINDOWS #ifdef OS_WINDOWS//如果在Windows操作系统上
v = utils::utf8_to_gbk(value.c_str()); v = utils::utf8_to_gbk(value.c_str()); //将值从UTF-8编码转换为GBK编码。
#endif #endif
data_[key] = v; data_[key] = v;//添加一个键值对
} }
} }
void Kv::remove(const std::string &key) { void Kv::remove(const std::string &key) {//是一个成员函数,用于删除一个键值对。
if (data_.find(key) == data_.end()) { if (data_.find(key) == data_.end()) {//如果键不存在
std::cerr << "[Kv] cannot find " << key << std::endl; std::cerr << "[Kv] cannot find " << key << std::endl;//打印一个错误消息。
return; return;
} }
data_.erase(key); data_.erase(key);//删除一个键值对。
} }
void Kv::clear() { void Kv::clear() {//是一个成员函数,用于清空所有的键值对。
data_.clear(); data_.clear();//用于清空所有的键值对。
} }
} }

Loading…
Cancel
Save