std::string_view 的使用

This commit is contained in:
2026-06-29 09:40:55 +08:00
parent cd446b7ca8
commit 8daf67aa5d
52 changed files with 1420 additions and 1367 deletions
+23 -20
View File
@@ -4,6 +4,7 @@
#include <fstream>
#include <sstream>
#include <string>
#include <string_view>
BaseLogger *server_logger = nullptr;
Debug_Logger_Info_Manager debug_logger_info_manager;
@@ -101,7 +102,7 @@ Global::Global() {
};
#endif
SSR::cpr_cb = [](SSR::CPR_Error_Type t, const std::string &log,
SSR::cpr_cb = [](SSR::CPR_Error_Type t, std::string_view log,
SSR::P_S msg) {
auto src = std::dynamic_pointer_cast<Data_Source>(msg->source);
Mode_S_Statistic_Data *ss = &src->mode_s_statistic;
@@ -113,7 +114,7 @@ Global::Global() {
// 处理错误
SSR::parse_call_back =
[this](SSR::Parse_Call_Back_Type type, SSR::Aircraft_Info *info,
const std::string &field_name, std::vector<std::string> bds_list,
std::string_view field_name, std::vector<std::string> bds_list,
void *, SSR::P_S msg) {
auto src = std::dynamic_pointer_cast<Data_Source>(msg->source);
Mode_S_Statistic_Data *ss = &src->mode_s_statistic;
@@ -151,25 +152,26 @@ Global::Global() {
}
Global::~Global() { std::cout << "Global::~Global()" << std::endl; }
void replace(std::string &originalStr, const std::string &findStr,
const std::string &replaceStr) {
void replace(std::string &originalStr, std::string_view findStr,
std::string_view replaceStr) {
size_t pos = originalStr.find(findStr);
while (pos != std::string::npos) {
originalStr.replace(pos, findStr.length(), replaceStr);
pos = originalStr.find(findStr, pos + replaceStr.length());
}
}
std::string oneLine(std::string str) {
replace(str, "\n", "[n]");
return str;
std::string oneLine(std::string_view str) {
auto ret = std::string(str);
replace(ret, "\n", "[n]");
return ret;
}
bool isHexadecimal(const std::string &str) {
bool isHexadecimal(std::string_view str) {
return std::all_of(str.begin(), str.end(), [](unsigned char c) {
return std::isdigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
});
}
void handle_buffer_muti_start(
std::string &buffer, const std::string &data,
std::string &buffer, std::string_view data,
const std::set<std::string> &prefix_list,
const std::function<void(std::string &)> &callback) {
if (!data.empty()) {
@@ -184,7 +186,7 @@ void handle_buffer_muti_start(
size_t pos = 0, n = buffer.size();
for (; pos < n; pos++) {
bool find = false;
for (const std::string &prefix : prefix_list) {
for (std::string_view prefix : prefix_list) {
if (pos + prefix.size() <= n) {
if (buffer.substr(pos, prefix.size()) == prefix) {
c = prefix;
@@ -207,8 +209,8 @@ void handle_buffer_muti_start(
}
}
void handle_buffer_head_tail(
std::string &buffer, const std::string &data, const std::string &prefix,
const std::string &suffix,
std::string &buffer, std::string_view data, std::string_view prefix,
std::string_view suffix,
const std::function<void(std::string &)> &callback) {
// 只在数据可用时进行读取
if (!data.empty()) {
@@ -272,24 +274,25 @@ bool is_10004(SSR::Mode_S_Msg &msg) {
return DF_11_17_18;
}
std::string to_file_name(std::string str) {
std::string to_file_name(std::string_view str) {
auto ret = std::string(str);
// 定义允许的合法字符
auto is_valid_char = [](char c) {
return std::isalnum(c) || c == '_' || c == '-' ||
c == '.'; // 允许字母、数字、下划线、连字符、点
};
// 替换非法字符为下划线 '_'
std::transform(str.begin(), str.end(), str.begin(),
std::transform(ret.begin(), ret.end(), ret.begin(),
[&](char c) { return is_valid_char(c) ? c : '_'; });
// 检查结果字符串是否全是替换字符,防止生成全是下划线的文件名
if (str.find_first_not_of('_') == std::string::npos) {
if (ret.find_first_not_of('_') == std::string::npos) {
return "default_file_name"; // 返回一个默认文件名
}
return str;
return ret;
}
void Debug_Logger_Info_Manager::push_info(const std::string &c) {
void Debug_Logger_Info_Manager::push_info(std::string_view c) {
std::lock_guard g(mtx);
std::string content = std::to_string(cur_serial_number) + ": " + c;
std::string content = std::to_string(cur_serial_number) + ": " + std::string(c);
size_t content_length = content.size();
info_list.push_back({cur_serial_number, content});
current_total_length += content_length;
@@ -308,7 +311,7 @@ JSON Debug_Logger_Info_Manager::to_json() {
ret.append({"cur_serial_number", cur_serial_number});
return ret;
}
bool Web_Server::listen(const std::string &host, int port) {
bool Web_Server::listen(std::string_view host, int port) {
drogon::HttpAppFramework *app = &drogon::app();
auto g = Global::instance();
Json::Value drogon_config;
@@ -329,7 +332,7 @@ bool Web_Server::listen(const std::string &host, int port) {
}
app->loadConfigJson(drogon_config);
app->disableSigtermHandling(); // 关闭服务器信号处理
app->addListener(host, port);
app->addListener(std::string(host), port);
auto base_dir = get_exe_dir();
// app->setLogPath(base_dir + "/logs/drogon.log");
app->setUploadPath(base_dir + "/drogon_uploads");