std::string_view 的使用
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user