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

@ -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();//用于清空所有的键值对。
}
}

Loading…
Cancel
Save