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