diff --git a/module/Local_Server/Aircraft/Aircraft.h b/module/Local_Server/Aircraft/Aircraft.h index 9e944ef..f22e07c 100644 --- a/module/Local_Server/Aircraft/Aircraft.h +++ b/module/Local_Server/Aircraft/Aircraft.h @@ -1,4 +1,5 @@ #pragma once +#include #include "../External_Database/export.h" @@ -11,7 +12,7 @@ class Aircraft : public SSR::Aircraft_Info { public: - explicit Aircraft(const std::string &icao); + explicit Aircraft(std::string_view icao); // 静态信息按 ICAO24 加载一次;航线信息仅在 callsign 变化时重新加载。 // map 的键是外部数据源名称。 @@ -23,13 +24,14 @@ public: std::optional last_external_database_callsign; [[nodiscard]] std::shared_ptr - external_database_row(const std::string &resource_name) const { + external_database_row(std::string_view resource_name) const { + auto key = std::string(resource_name); const auto callsign_iter = - callsign_external_database_info.find(resource_name); + callsign_external_database_info.find(key); if (callsign_iter != callsign_external_database_info.end()) { return callsign_iter->second; } - const auto iter = external_database_info.find(resource_name); + const auto iter = external_database_info.find(key); return iter == external_database_info.end() ? nullptr : iter->second; } diff --git a/module/Local_Server/Crawler/Crawler.h b/module/Local_Server/Crawler/Crawler.h index ed92523..44d3906 100644 --- a/module/Local_Server/Crawler/Crawler.h +++ b/module/Local_Server/Crawler/Crawler.h @@ -1,4 +1,5 @@ #pragma once +#include #include "../../../../../core_library/Core/Core/Base/JSON.h" #include "Core/Statistics/Frequency_Limit.h" @@ -12,11 +13,11 @@ class Crawler { public: - using Call_back = std::function; - explicit Crawler(const std::string &db_path) - : db_(db_path, SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE) { + explicit Crawler(std::string_view db_path) + : db_(std::string(db_path), SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE) { aircraft_json_table_create_if_not_exists(); // 可选:性能更好(仍然是同步) db_.exec("PRAGMA journal_mode=WAL;"); @@ -32,7 +33,7 @@ public: )sql"); } - bool check_aircraft_exists(SQLite::Database &db, const std::string &icao) { + bool check_aircraft_exists(SQLite::Database &db, std::string_view icao) { // 查询是否存在该icao static auto stmt_check_ = SQLite::Statement(db, R"sql( SELECT COUNT(*) FROM aircraft_json WHERE icao = ?; @@ -40,7 +41,7 @@ public: stmt_check_.reset(); stmt_check_.clearBindings(); - stmt_check_.bind(1, icao); + stmt_check_.bind(1, std::string(icao)); int count = 0; if (stmt_check_.executeStep()) { @@ -51,7 +52,7 @@ public: return count > 0; } - void insert_aircraft_json(const std::string &icao, const Psc::JSON &j) { + void insert_aircraft_json(std::string_view icao, const Psc::JSON &j) { static auto stmt_upsert_ = SQLite::Statement(db_, R"sql( INSERT INTO aircraft_json(icao, json) VALUES(?, ?) @@ -63,7 +64,7 @@ public: SQLite::Transaction tx(db_); // BEGIN stmt_upsert_.reset(); stmt_upsert_.clearBindings(); - stmt_upsert_.bind(1, icao); + stmt_upsert_.bind(1, std::string(icao)); stmt_upsert_.bind(2, json_str); stmt_upsert_.exec(); tx.commit(); @@ -72,7 +73,7 @@ public: void req_all_insert_aircraft_json() { std::atomic idx = 0; handle( - [this, &idx](std::string hex, std::string icaoType, Psc::JSON &json) { + [this, &idx](std::string_view hex, std::string_view icaoType, Psc::JSON &json) { // 直接同步写库(最简单) try { static Frequency_Limit fl; diff --git a/module/Local_Server/Data_Feed/Data_Feed.cpp b/module/Local_Server/Data_Feed/Data_Feed.cpp index 65c25e7..dd3f844 100644 --- a/module/Local_Server/Data_Feed/Data_Feed.cpp +++ b/module/Local_Server/Data_Feed/Data_Feed.cpp @@ -1,5 +1,6 @@ #include "Local_Server/Data_Feed/Data_Feed.h" #include "../server/Global.h" +#include bool Data_Feed::registered() { auto all_feed = Global::instance()->mode_acs.data_feed_config.map.list(); for (auto& item : all_feed) { @@ -13,7 +14,7 @@ asio::awaitable Data_Feed_UDP_Server::handle_in_loop_coro() { co_await svr.tick_coro(); co_return; } -asio::awaitable Data_Feed_UDP_Server::send_coro(const std::string& data) { +asio::awaitable Data_Feed_UDP_Server::send_coro(std::string_view data) { co_await svr.write_to_all_clients_coro(data); co_return; } @@ -23,8 +24,8 @@ asio::awaitable Data_Feed_UDP_Server::_open() { server_logger->c_debug({}, {}, to_string() + "开启!"); co_return; } -JSON Data_feed_Config::get_feed(const std::string& key) { - auto ret = map.get(key); +JSON Data_feed_Config::get_feed(std::string_view key) { + auto ret = map.get(std::string(key)); if (ret.has_value()) { auto r = ret.value().get(); return r->to_json(); @@ -127,7 +128,7 @@ void Data_feed_Config::server(Global *g) { g->mode_acs.source_feed_relation_config.set_need_refresh(); }); } -void BIN_Msg_Buffer::push(const std::string& msg) { +void BIN_Msg_Buffer::push(std::string_view msg) { auto output_packet_size = Global::instance()->mode_acs.data_feed_config.packet_byte_size.load(); std::lock_guard g(mtx); diff --git a/module/Local_Server/Data_Feed/Data_Feed.h b/module/Local_Server/Data_Feed/Data_Feed.h index fb0590c..bae5a6f 100644 --- a/module/Local_Server/Data_Feed/Data_Feed.h +++ b/module/Local_Server/Data_Feed/Data_Feed.h @@ -1,4 +1,5 @@ #pragma once +#include #include "Local_Server/server/With_Loop_Coro.h" #include "global.h" #include @@ -25,7 +26,7 @@ public: co_return; } - virtual asio::awaitable send_coro(const std::string&) { + virtual asio::awaitable send_coro(std::string_view) { co_return; } @@ -89,7 +90,7 @@ public: co_return; } - asio::awaitable send_coro(const std::string& data) override { + asio::awaitable send_coro(std::string_view data) override { co_await svr.write_to_all_clients_coro(data); co_return; } @@ -162,7 +163,7 @@ public: co_return; } - asio::awaitable send_coro(const std::string& data) override { + asio::awaitable send_coro(std::string_view data) override { co_await cli.send_coro(data); co_return; } @@ -217,7 +218,7 @@ public: Data_Feed_UDP_Server() = default; ~Data_Feed_UDP_Server() override = default; asio::awaitable handle_in_loop_coro() override; - asio::awaitable send_coro(const std::string& data) override; + asio::awaitable send_coro(std::string_view data) override; [[nodiscard]] Psc::JSON get_clients_json() const { Psc::JSON ret = Psc::JSON::array(); @@ -268,7 +269,7 @@ public: co_return; } - asio::awaitable send_coro(const std::string& data) override { + asio::awaitable send_coro(std::string_view data) override { co_await cli.send_coro(data); co_return; } @@ -299,7 +300,7 @@ public: } }; -inline std::shared_ptr create_data_feed_from_type(const std::string& t) { +inline std::shared_ptr create_data_feed_from_type(std::string_view t) { std::shared_ptr ret{}; if (t == "Data_Feed_TCP_Server") ret = std::make_shared(); @@ -359,6 +360,6 @@ public: return ret; } - Psc::JSON get_feed(const std::string& key); + Psc::JSON get_feed(std::string_view key); void server(Global* g); }; diff --git a/module/Local_Server/Data_Source/Data_Source.cpp b/module/Local_Server/Data_Source/Data_Source.cpp index 6d02af9..138b4ed 100644 --- a/module/Local_Server/Data_Source/Data_Source.cpp +++ b/module/Local_Server/Data_Source/Data_Source.cpp @@ -2,7 +2,8 @@ #include #include "../server/Global.h" #include "Database.h" -Psc::serial::Serial* create_serial(const std::string& serial_name, +#include +Psc::serial::Serial* create_serial(std::string_view serial_name, Baud_Rate_Type baud_rate) { auto serial = new Psc::serial::Serial; serial->set_serial_name(serial_name); @@ -13,7 +14,7 @@ Psc::serial::Serial* create_serial(const std::string& serial_name, serial->set_flow_control(Psc::serial::FlowControl::HardwareControl); serial->set_buffer_byte_size(10 * 1024); if (!serial->open()) { - std::cerr << "createSerial " + serial_name + ":" + + std::cerr << "createSerial " + std::string(serial_name) + ":" + std::to_string(baud_rate) + " 打开串口失败!\n"; Psc::fail_fast(); return nullptr; @@ -82,14 +83,15 @@ void File_Data_Source::before_handle_msg(std::shared_ptr& msg) { } } } -std::vector readLines(const std::string& path) { +std::vector readLines(std::string_view path) { std::vector lines; + auto path_string = std::string(path); std::filesystem::path p = - std::filesystem::path((const char8_t*)path.c_str()); + std::filesystem::path((const char8_t*)path_string.c_str()); // std::filesystem::path p = std::filesystem::u8path(path); std::ifstream istream(p); if (!istream) { - std::cerr << "读取模拟数据源 readLines 无法打开文件:" << path << std::endl; + std::cerr << "读取模拟数据源 readLines 无法打开文件:" << path_string << std::endl; Psc::fail_fast(); } // 将整个文件读入一个字符串 @@ -131,23 +133,23 @@ std::vector readLines(const std::string& path) { lines.push_back(line); } std::ostringstream oss; - oss << path + " 总行数:" + std::to_string(lines.size()) + " 有效行数:" + + oss << path_string + " 总行数:" + std::to_string(lines.size()) + " 有效行数:" + std::to_string(lines.size()) + "\n" << std::flush; std::cout << oss.str() << std::flush; return lines; } -std::string extractID(const std::string& logLine) { +std::string extractID(std::string_view logLine) { size_t lastSpacePos = logLine.rfind(" "); // 查找最后一个空格 if (lastSpacePos != std::string::npos) { - return logLine.substr(lastSpacePos + 1); // 从最后一个空格之后提取字符串 + return std::string(logLine.substr(lastSpacePos + 1)); // 从最后一个空格之后提取字符串 } - return logLine; + return std::string(logLine); } -time_t convert_to_timestamp(const std::string& str) { +time_t convert_to_timestamp(std::string_view str) { // 创建一个结构体 tm 来存储解析后的时间 std::tm timeStruct = {}; - std::istringstream ss(str); + std::istringstream ss{std::string(str)}; ss >> std::get_time(&timeStruct, "%Y-%m-%d %H:%M:%S"); if (ss.fail()) { std::cerr << "Failed to parse time" << std::endl; @@ -161,18 +163,18 @@ time_t convert_to_timestamp(const std::string& str) { } return timestamp; } -std::tuple extractID2(const std::string& logLine) { +std::tuple extractID2(std::string_view logLine) { size_t lastSpacePos = logLine.rfind(" "); // 查找最后一个空格 time_t t = convert_to_timestamp(logLine.substr(0, 19)); if (lastSpacePos != std::string::npos) { return { - logLine.substr(lastSpacePos + 1), + std::string(logLine.substr(lastSpacePos + 1)), t }; // 从最后一个空格之后提取字符串 } - return {logLine, t}; + return {std::string(logLine), t}; } -std::string bin_format(const std::string& hex, time_t t) { +std::string bin_format(std::string_view hex, time_t t) { std::tm *currentTime = std::localtime(&t); auto sec = currentTime->tm_hour * 3600 + currentTime->tm_min * 60 + currentTime->tm_sec; @@ -208,11 +210,11 @@ std::optional File_Data_Source::get_raw_line(int& ret_index) { } // 1A 33 1A 1A F1 FB 87 73 7E 7F a8001d81a87543b0a80000 std::string get_true_from_raw_line(Data_Source *ds, File_Data_Type data_type, - int index, const std::string& log_info) { + int index, std::string_view log_info) { std::string ret; // 2025-01-06 07:20:17 [info] dc2541e65001401a3119b2dd1c7af67132201 if (data_type == File_Data_Type::BIN) { - return log_info; + return std::string(log_info); } else if (data_type == File_Data_Type::BIN_Text) { auto info = extractID(log_info); @@ -226,7 +228,7 @@ std::string get_true_from_raw_line(Data_Source *ds, File_Data_Type data_type, // 10 01 AA 14 61 7E 5E 02 E6 0F 38 7D 87 08 1A 32 10 01 AD B5 64 F7 63 5D 78 // 0F 9D BA 93 BA else if (data_type == File_Data_Type::BIN_Blank_Text) { - std::string info = log_info; + std::string info(log_info); std::string result = ds->last_char; ds->last_char = ""; for (char c : info) { @@ -254,25 +256,25 @@ std::string get_true_from_raw_line(Data_Source *ds, File_Data_Type data_type, ret = hex2mem(result); } else if (data_type == File_Data_Type::BIN_Blank_One_Line_With_Escape) { - auto size = log_info.size(); + auto size = log_info.size(); if (size % 2 != 0) { - return hex2mem(log_info.substr(0, size - 1)); + return hex2mem(std::string(log_info.substr(0, size - 1))); } - return hex2mem(log_info); + return hex2mem(std::string(log_info)); } else if (data_type == File_Data_Type::BIN_Blank_One_Line_No_Escape) { auto size = log_info.size(); std::string data; if (size % 2 != 0) { - data = log_info.substr(0, size - 1); + data = std::string(log_info.substr(0, size - 1)); } else { - data = log_info; + data = std::string(log_info); } return SSR::packet_to_escape_format(hex2mem(data)); } else if (data_type == File_Data_Type::SIMPLE_BIN_Blank) { - std::string info = log_info; + std::string info(log_info); std::string result; for (char c : info) { if (c != ' ') { @@ -334,7 +336,7 @@ asio::awaitable File_Data_Source::_open() { state = "已加载" + to_string(part_infos.size()) + "长度数据!"; co_return; } -std::vector File_Data_Source::readBinaryFileAsString(const std::string& filepath, +std::vector File_Data_Source::readBinaryFileAsString(std::string_view filepath, size_t part_size) { // 打开文件(以二进制模式) std::ifstream file(filepath, std::ios::binary); diff --git a/module/Local_Server/Data_Source/Data_Source.h b/module/Local_Server/Data_Source/Data_Source.h index 9157a7e..6d96152 100644 --- a/module/Local_Server/Data_Source/Data_Source.h +++ b/module/Local_Server/Data_Source/Data_Source.h @@ -1,4 +1,5 @@ #pragma once +#include #include "Data_Source_Handler.h" namespace Psc { class SM_RingBuffer; @@ -263,7 +264,7 @@ public: } asio::awaitable _close() override; asio::awaitable _open() override; - std::vector readBinaryFileAsString(const std::string& filepath, + std::vector readBinaryFileAsString(std::string_view filepath, size_t part_size); void from_json(const Psc::JSON* that_json) override { Data_Source::from_json(that_json); @@ -370,7 +371,7 @@ protected: std::unique_ptr sm; }; inline std::shared_ptr -create_data_source_from_type(const std::string& t) { +create_data_source_from_type(std::string_view t) { std::shared_ptr ret{}; if (t == "Serial_Data_Source") ret = std::make_shared(); @@ -384,7 +385,7 @@ create_data_source_from_type(const std::string& t) { ret = std::make_shared(); else { std::cout << "未知�?Data_Source type类型!" << std::endl; - throw std::invalid_argument("unknown Data_Source type: " + t); + throw std::invalid_argument("unknown Data_Source type: " + std::string(t)); } return ret; } diff --git a/module/Local_Server/Data_Source/Data_Source_Handler.cpp b/module/Local_Server/Data_Source/Data_Source_Handler.cpp index 9d1981d..8292042 100644 --- a/module/Local_Server/Data_Source/Data_Source_Handler.cpp +++ b/module/Local_Server/Data_Source/Data_Source_Handler.cpp @@ -1,29 +1,28 @@ #include "Data_Source_Handler.h" #include "Data_Source.h" #include "Local_Server/server/Global.h" +#include using namespace Psc; - -std::shared_ptr ds(Data_Source_Handler* dsh) { +std::shared_ptr ds(Data_Source_Handler *dsh) { return dynamic_cast(dsh)->that(); } - -std::shared_ptr Data_Source_Handler::create_msg(const std::string& packet) { +std::shared_ptr Data_Source_Handler::create_msg(std::string_view packet) { auto source = ds(this); if (packet[0] != 0x1a) { - std::cout << "first:" << mem2hex(packet) << std::endl; + std::cout << "first:" << mem2hex(std::string(packet)) << std::endl; return nullptr; } std::string error_len = source->key + " " + LOG_POS_SIMPLE + std::string(" ") + "mode_s_error_length"; - if (packet.size() < 2) - return nullptr; + if (packet.size() < 2) return nullptr; auto mt = packet[1]; if (mt == SSR::Msg::AC) { if (packet.size() != SSR::Msg::AC_len) { + auto packet_hex = mem2hex(std::string(packet)); SSR::mode_s_logger->c_debug( error_len, {}, std::to_string(mt) + " size:" + std::to_string(packet.size()) + - " hex:" + mem2hex(packet) + + " hex:" + packet_hex + " should:" + std::to_string(SSR::Msg::AC_len)); mode_ac_statistic.add_length_error(); return nullptr; @@ -33,10 +32,11 @@ std::shared_ptr Data_Source_Handler::create_msg(const std::string& pac } if (mt == SSR::Msg::S7) { if (packet.size() != SSR::Mode_S_Msg::S7_len) { + auto packet_hex = mem2hex(std::string(packet)); SSR::mode_s_logger->c_debug( error_len, {}, std::to_string(mt) + " size:" + std::to_string(packet.size()) + - " hex:" + mem2hex(packet) + + " hex:" + packet_hex + " should:" + std::to_string(SSR::Msg::S7_len)); mode_s_statistic.add_length_error( "[length error] Msg::S7 handle_mode_s_source"); @@ -46,10 +46,11 @@ std::shared_ptr Data_Source_Handler::create_msg(const std::string& pac } if (mt == SSR::Msg::S14) { if (packet.size() != SSR::Msg::S14_len) { + auto packet_hex = mem2hex(std::string(packet)); SSR::mode_s_logger->c_debug( error_len, {}, std::to_string(mt) + " size:" + std::to_string(packet.size()) + - " hex:" + mem2hex(packet) + + " hex:" + packet_hex + " should:" + std::to_string(SSR::Msg::S14_len)); mode_s_statistic.add_length_error( "[length error] Msg::S14 handle_mode_s_source"); @@ -60,10 +61,11 @@ std::shared_ptr Data_Source_Handler::create_msg(const std::string& pac if (mt == SSR::Msg::Radarcape_status) { return nullptr; // 不知道如何解析跳过 if (packet.size() != SSR::Msg::Radarcape_status_len) { + auto packet_hex = mem2hex(std::string(packet)); SSR::mode_s_logger->c_debug( error_len, {}, std::to_string(mt) + " size:" + std::to_string(packet.size()) + - " hex:" + mem2hex(packet) + + " hex:" + packet_hex + " should:" + std::to_string(SSR::Msg::Radarcape_status_len)); mode_s_statistic.add_length_error( "[length error] Msg::Radarcape_status_len handle_mode_s_source"); @@ -73,24 +75,24 @@ std::shared_ptr Data_Source_Handler::create_msg(const std::string& pac } if (mt == SSR::Msg::HULC_Status) { if (packet.size() != SSR::Msg::HULC_len) { + auto packet_hex = mem2hex(std::string(packet)); // 找不到协议 size:23 hex:1A34195F0000001500B502FF06F423CE50000090000000 // should:5 SSR::mode_s_logger->c_debug( error_len, {}, Psc::to_string(source->type) + " HULC size:" + - std::to_string(packet.size()) + " hex:" + mem2hex(packet)); + std::to_string(packet.size()) + " hex:" + packet_hex); return nullptr; } return std::make_shared(source, packet); } // std::cout << "unknown_type:" << memory2hex(packet); - rotating_log("unknown_type", mem2hex(packet)); + rotating_log("unknown_type", mem2hex(std::string(packet))); return nullptr; } - -size_t Data_Source_Handler::process_mode_acs_data(const std::string& origin_data) { +size_t Data_Source_Handler::process_mode_acs_data(std::string_view origin_data) { // 先读取原始数据 注意多复制了一遍 - auto mode_data = origin_data; + std::string mode_data(origin_data); origin_data_transform_mode_data(mode_data); size_t ret = 0; if (mode_data.empty()) { @@ -115,8 +117,7 @@ size_t Data_Source_Handler::process_mode_acs_data(const std::string& origin_data source->buffer, mode_data, [this, source, &ret](std::string& packet) { ret++; auto msg = create_msg(packet); - if (!msg) - return; + if (!msg) return; source->push_to_feed(msg); auto mt = msg->type; bool mode_s = mt == SSR::Msg::S7 || mt == SSR::Msg::S14; @@ -136,7 +137,6 @@ size_t Data_Source_Handler::process_mode_acs_data(const std::string& origin_data }); return ret; } - void Data_Source_Handler::handle_mode_s(std::shared_ptr mode_s_msg) { auto source = ds(this); std::string t = mode_s_msg->mlat_timestamp.to_memory() + @@ -219,16 +219,15 @@ void Data_Source_Handler::handle_mode_s(std::shared_ptr mode_s_ } } } - -void Data_Source_Handler::handle_HULC(const std::string& packet) { +void Data_Source_Handler::handle_HULC(std::string_view packet) { std::uint8_t len = SSR::get_len(packet); std::uint8_t id = SSR::get_id(packet); - auto msg = mem2hex(packet); + auto msg = mem2hex(std::string(packet)); if (len != packet.size() - 4) { SSR::mode_s_logger->debug("HULC/error_length", {}, "需要: " + std::to_string(len) + " 当前: " + std::to_string(packet.size()) + - " hex: " + mem2hex(packet)); + " hex: " + mem2hex(std::string(packet))); return; } if (id == 1) { @@ -239,7 +238,7 @@ void Data_Source_Handler::handle_HULC(const std::string& packet) { if (gps_ok) {} auto g = Global::instance(); base_station.set_msg(status_msg); - Log_Type type({}, {{"msg", msg}}); + Log_Type type({}, {{"msg", std::string(msg)}}); SSR::mode_s_logger->debug("HULC/status", type, status_msg.toJson().to_json_string()); if (gps_ok) {} @@ -251,14 +250,12 @@ void Data_Source_Handler::handle_HULC(const std::string& packet) { SSR::mode_s_logger->debug("HULC/unknown_id", {}, msg); } } - void Data_Source_Handler::refresh_data_feed_key_list() { // std::cout << key << " refresh_data_feed_key_list" << std::endl; std::vector tmp; for (auto& relation : Global::instance()->mode_acs.source_feed_relation_config.map.list()) { - if (!relation->enable) - continue; + if (!relation->enable) continue; if (relation->type == "One_to_One_Relation") { auto t = dynamic_cast(relation.get()); // std::cout << VAR_STR_2(t->source_key, this->key) << " @@ -330,8 +327,7 @@ void Data_Source_Handler::refresh_data_feed_key_list() { } } } - -std::optional convert_to_send_format(Data_Source_Handler* ds, +std::optional convert_to_send_format(Data_Source_Handler *ds, const std::shared_ptr& feed, const std::shared_ptr& msg) { auto& type = msg->type; @@ -349,8 +345,7 @@ std::optional convert_to_send_format(Data_Source_Handler* ds, // 计算出是否输出消息 std::optional send_msg = std::nullopt; if (type == SSR::Msg::HULC_Status) { - if (!use_status) - return std::nullopt; + if (!use_status) return std::nullopt; auto data = static_cast(msg.get()); if (output_format == Output_Data_Format::BIN || output_format == Output_Data_Format::BIN_ID) { @@ -365,8 +360,7 @@ std::optional convert_to_send_format(Data_Source_Handler* ds, } } else if (type == SSR::Msg::AC) { - if (!use_mode_ac) - return std::nullopt; + if (!use_mode_ac) return std::nullopt; auto data = static_cast(msg.get()); std::string& msg_hex = data->msg_hex; char signal_level = data->signal_level; @@ -417,12 +411,10 @@ std::optional convert_to_send_format(Data_Source_Handler* ds, sbs_out_put = true; } } - if (!sbs_out_put) - return std::nullopt; + if (!sbs_out_put) return std::nullopt; send_msg = ""; SSR::SBS_MSG msg_base; - if (!aircraft) - return std::nullopt; + if (!aircraft) return std::nullopt; msg_base.set(aircraft.get()); for (int msg_t = 1; msg_t <= 8; ++msg_t) { send_msg->append(msg_base.to_msg(msg_t) + "\n"); @@ -438,8 +430,7 @@ std::optional convert_to_send_format(Data_Source_Handler* ds, df == SSR::Downlink_Format::All_Call_Reply_11 || df == SSR::Downlink_Format::Extended_Squitter_17 || df == SSR::Downlink_Format::Extended_Squitter_Non_Transponder_18; - if (mode_s_output_type == Mode_S_Output_Type::DF_11_17_18 && !DF_11_17_18) - return std::nullopt; + if (mode_s_output_type == Mode_S_Output_Type::DF_11_17_18 && !DF_11_17_18) return std::nullopt; if (mode_s_output_type == Mode_S_Output_Type::NO_POS_Mode_S) { if (aircraft && aircraft->pos().has_value()) { return std::nullopt; @@ -472,7 +463,6 @@ std::optional convert_to_send_format(Data_Source_Handler* ds, } return send_msg; } - void Data_Source_Handler::push_to_feed(const std::shared_ptr& msg) { if (need_refresh_data_feed_key_list) { refresh_data_feed_key_list(); @@ -489,8 +479,7 @@ void Data_Source_Handler::push_to_feed(const std::shared_ptr& msg) { break; } std::shared_ptr& feed = opt_feed.value(); - if (!feed->enable) - continue; + if (!feed->enable) continue; if (msg->type == SSR::Mode_Msg::T::S7 || msg->type == SSR::Mode_Msg::T::S14) { // static Frequency_Limit fl; @@ -521,7 +510,6 @@ void Data_Source_Handler::push_to_feed(const std::shared_ptr& msg) { } } } - Psc::JSON Data_Source_Handler::get_all_connect_feed_status() { Psc::JSON ret = Psc::JSON::object(); std::vector list; @@ -543,7 +531,6 @@ Psc::JSON Data_Source_Handler::get_all_connect_feed_status() { } return ret; } - Psc::JSON Data_Source_Handler::get_all_connect_feed() { Psc::JSON ret = Psc::JSON::array(); std::vector list; diff --git a/module/Local_Server/Data_Source/Data_Source_Handler.h b/module/Local_Server/Data_Source/Data_Source_Handler.h index 0942519..8c53b91 100644 --- a/module/Local_Server/Data_Source/Data_Source_Handler.h +++ b/module/Local_Server/Data_Source/Data_Source_Handler.h @@ -1,4 +1,5 @@ #pragma once +#include #include #include "Core/Base/SM_RingBuffer.h" #include "Core/Serial/Serial_Coro.h" @@ -12,12 +13,12 @@ // 这个函数专门装cpu密集函数 放到线程池去处理 class Data_Source_Handler : public DataBase { public: - std::shared_ptr create_msg(const std::string& packet); + std::shared_ptr create_msg(std::string_view packet); virtual void origin_data_transform_mode_data(std::string& origin_data) {}; virtual void before_handle_msg(std::shared_ptr& msg) {}; virtual void handle_mode_s(std::shared_ptr msg); - void handle_HULC(const std::string& packet); - size_t process_mode_acs_data(const std::string& mode_data); + void handle_HULC(std::string_view packet); + size_t process_mode_acs_data(std::string_view mode_data); Mode_AC_Statistic_Data mode_ac_statistic; Mode_S_Statistic_Data mode_s_statistic; Psc::Speed_Statistics read_speed; diff --git a/module/Local_Server/Data_Source/Database.cpp b/module/Local_Server/Data_Source/Database.cpp index 325a472..8c7a410 100644 --- a/module/Local_Server/Data_Source/Database.cpp +++ b/module/Local_Server/Data_Source/Database.cpp @@ -5,8 +5,9 @@ #include #include #include +#include -Aircraft::Aircraft(const std::string &icao) : Aircraft_Info(icao) { +Aircraft::Aircraft(std::string_view icao) : Aircraft_Info(icao) { auto size = Global::instance()->mode_acs.max_track_point_size.load(); air_pos_track_list.init(size); surface_pos_track_list.init(size); @@ -32,13 +33,13 @@ void Aircraft::refresh_external_database_info() { } std::shared_ptr -DataBase::get_aircraft(const std::string &icao) { - return aircraft_map.get(icao); +DataBase::get_aircraft(std::string_view icao) { + return aircraft_map.get(std::string(icao)); } std::shared_ptr -DataBase::create_aircraft(const std::string &icao) { - auto ret = aircraft_map.create(icao); +DataBase::create_aircraft(std::string_view icao) { + auto ret = aircraft_map.create(std::string(icao)); ret->refresh_external_database_info(); return ret; } @@ -298,8 +299,8 @@ void database_server(Global *g) { static std::string output; -static void log_i(const std::string &label, const std::string &value, - const std::string &unit = "") { +static void log_i(std::string_view label, std::string_view value, + std::string_view unit = "") { std::ostringstream oss; // Format the label and value oss << std::left << std::setw(30) << label << ": " << value; @@ -313,7 +314,7 @@ static void log_i(const std::string &label, const std::string &value, output += oss.str(); } -static void log_i(const std::string &label, double value, - const std::string &unit = "") { +static void log_i(std::string_view label, double value, + std::string_view unit = "") { log_i(label, std::to_string(value), unit); } diff --git a/module/Local_Server/Data_Source/Database.h b/module/Local_Server/Data_Source/Database.h index 5eb329a..aab2528 100644 --- a/module/Local_Server/Data_Source/Database.h +++ b/module/Local_Server/Data_Source/Database.h @@ -1,4 +1,5 @@ #pragma once +#include #include "../Aircraft/Aircraft.h" #include "../Aircraft/Flight_VTO.h" #include "../External_Database/export.h" @@ -148,8 +149,8 @@ protected: }; class DataBase : public SSR::Data_Source_Interface, public With_Loop_Coro { public: - std::shared_ptr get_aircraft(const std::string& icao) override; - std::shared_ptr create_aircraft(const std::string& icao) override; + std::shared_ptr get_aircraft(std::string_view icao) override; + std::shared_ptr create_aircraft(std::string_view icao) override; Psc::JSON get_aircraftlist(); Psc::JSON get_aircraftlist(int limit_msg_num); BaseStation base_station; diff --git a/module/Local_Server/External_Database/External_Database.cpp b/module/Local_Server/External_Database/External_Database.cpp index fa57492..c2d0e10 100644 --- a/module/Local_Server/External_Database/External_Database.cpp +++ b/module/Local_Server/External_Database/External_Database.cpp @@ -17,6 +17,7 @@ #include #include #include +#include namespace { Psc::JSON @@ -77,8 +78,8 @@ asio::awaitable await_external_database_callback(Starter starter) { } // namespace std::optional -External_Database_Row::get(const std::string &column) const { - const auto iter = columns.find(column); +External_Database_Row::get(std::string_view column) const { + const auto iter = columns.find(std::string(column)); return iter == columns.end() ? std::nullopt : iter->second; } @@ -91,12 +92,12 @@ Psc::JSON External_Database_Row::to_json() const { } External_Resources::External_Resources( - std::string name, std::string cache_file_name, std::string download_url, - std::string description, const std::uint64_t update_interval_seconds) { - this->name = std::move(name); - this->cache_file_name = std::move(cache_file_name); - this->download_url = std::move(download_url); - this->description = std::move(description); + std::string_view name, std::string_view cache_file_name, std::string_view download_url, + std::string_view description, const std::uint64_t update_interval_seconds) { + this->name = std::string(name); + this->cache_file_name = std::string(cache_file_name); + this->download_url = std::string(download_url); + this->description = std::string(description); this->update_interval_seconds = update_interval_seconds; } @@ -280,7 +281,7 @@ Psc::JSON External_Resources_Manager::to_base_json() const { return ret; } -void External_Resources_Manager::load_sqlite_db(std::string path) { +void External_Resources_Manager::load_sqlite_db(std::string_view path) { try { db_ = std::make_unique(path, SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE); @@ -301,32 +302,32 @@ External_Resources_Manager::refresh_external_databases( } External_Resource_Status External_Resources_Manager::refresh_external_database( - const std::string &resource_name, const bool force_download) { + std::string_view resource_name, const bool force_download) { return refresh_one(require_db(), resource_name, force_download); } External_Resource_Status External_Resources_Manager::import_external_database( - const std::string &resource_name, + std::string_view resource_name, const std::filesystem::path &source_file) { return import_offline(require_db(), resource_name, source_file); } External_Resource_Status External_Resources_Manager::clear_external_database_table( - const std::string &resource_name) { + std::string_view resource_name) { return clear_table(require_db(), resource_name); } std::optional External_Resources_Manager::query_external_database( - const std::string &resource_name, + std::string_view resource_name, const std::vector &primary_key_values) const { return query_one(require_db(), resource_name, primary_key_values); } std::map> External_Resources_Manager::query_aircraft_external_databases( - const std::string &icao24) const { + std::string_view icao24) const { return query_aircraft(require_db(), icao24); } @@ -351,7 +352,7 @@ void External_Resources_Manager::async_refresh_external_databases( } void External_Resources_Manager::async_refresh_external_database( - std::string resource_name, const bool force_download, + std::string_view resource_name, const bool force_download, Status_Callback callback) { run_external_database_async( [this, resource_name = std::move(resource_name), force_download]() { @@ -361,7 +362,7 @@ void External_Resources_Manager::async_refresh_external_database( } void External_Resources_Manager::async_import_external_database( - std::string resource_name, std::filesystem::path source_file, + std::string_view resource_name, std::filesystem::path source_file, Status_Callback callback) { run_external_database_async( [this, resource_name = std::move(resource_name), @@ -372,7 +373,7 @@ void External_Resources_Manager::async_import_external_database( } void External_Resources_Manager::async_clear_external_database_table( - std::string resource_name, Status_Callback callback) { + std::string_view resource_name, Status_Callback callback) { run_external_database_async( [this, resource_name = std::move(resource_name)]() { return clear_external_database_table(resource_name); @@ -381,7 +382,7 @@ void External_Resources_Manager::async_clear_external_database_table( } void External_Resources_Manager::async_query_external_database( - std::string resource_name, std::vector primary_key_values, + std::string_view resource_name, std::vector primary_key_values, Row_Callback callback) const { run_external_database_async>( [this, resource_name = std::move(resource_name), @@ -392,7 +393,7 @@ void External_Resources_Manager::async_query_external_database( } void External_Resources_Manager::async_query_aircraft_external_databases( - std::string icao24, Row_Map_Callback callback) const { + std::string_view icao24, Row_Map_Callback callback) const { run_external_database_async< std::map>>( [this, icao24 = std::move(icao24)]() { @@ -429,7 +430,7 @@ External_Resources_Manager::refresh_external_databases_coro( asio::awaitable External_Resources_Manager::refresh_external_database_coro( - std::string resource_name, const bool force_download) { + std::string_view resource_name, const bool force_download) { co_return co_await await_external_database_callback( [this, resource_name = std::move(resource_name), force_download](Status_Callback callback) mutable { @@ -440,7 +441,7 @@ External_Resources_Manager::refresh_external_database_coro( asio::awaitable External_Resources_Manager::import_external_database_coro( - std::string resource_name, std::filesystem::path source_file) { + std::string_view resource_name, std::filesystem::path source_file) { co_return co_await await_external_database_callback( [this, resource_name = std::move(resource_name), source_file = std::move(source_file)](Status_Callback callback) mutable { @@ -452,7 +453,7 @@ External_Resources_Manager::import_external_database_coro( asio::awaitable External_Resources_Manager::clear_external_database_table_coro( - std::string resource_name) { + std::string_view resource_name) { co_return co_await await_external_database_callback( [this, resource_name = std::move(resource_name)](Status_Callback callback) mutable { @@ -463,7 +464,7 @@ External_Resources_Manager::clear_external_database_table_coro( asio::awaitable> External_Resources_Manager::query_external_database_coro( - std::string resource_name, + std::string_view resource_name, std::vector primary_key_values) const { co_return co_await await_external_database_callback< std::optional>( @@ -478,7 +479,7 @@ External_Resources_Manager::query_external_database_coro( asio::awaitable> External_Resources_Manager::query_aircraft_external_databases_coro( - std::string icao24) const { + std::string_view icao24) const { auto result = co_await Psc::coro::callback_result< std::shared_ptr>( [this, icao24 = std::move(icao24)](auto done) mutable { @@ -677,7 +678,7 @@ External_Resources_Manager::refresh_all(SQLite::Database &db, External_Resource_Status External_Resources_Manager::refresh_one(SQLite::Database &db, - const std::string &resource_name, + std::string_view resource_name, const bool force_download) { std::lock_guard lock(mtx_); return get_resource(resource_name) @@ -685,7 +686,7 @@ External_Resources_Manager::refresh_one(SQLite::Database &db, } External_Resource_Status External_Resources_Manager::import_offline( - SQLite::Database &db, const std::string &resource_name, + SQLite::Database &db, std::string_view resource_name, const std::filesystem::path &source_file) { std::lock_guard lock(mtx_); return get_resource(resource_name).import_offline(db, source_file); @@ -693,13 +694,13 @@ External_Resource_Status External_Resources_Manager::import_offline( External_Resource_Status External_Resources_Manager::clear_table(SQLite::Database &db, - const std::string &resource_name) { + std::string_view resource_name) { std::lock_guard lock(mtx_); return get_resource(resource_name).clear_table(db, cache_pos_); } std::optional External_Resources_Manager::query_one( - SQLite::Database &db, const std::string &resource_name, + SQLite::Database &db, std::string_view resource_name, const std::vector &primary_key_values) const { std::lock_guard lock(mtx_); return get_resource(resource_name).query_one(db, primary_key_values); @@ -707,7 +708,7 @@ std::optional External_Resources_Manager::query_one( std::map> External_Resources_Manager::query_aircraft(SQLite::Database &db, - const std::string &icao24) const { + std::string_view icao24) const { Scope_Timer timer( "external_database.query_aircraft", Global::instance()->http_monitor_config.slow_scope_threshold_ms); @@ -718,22 +719,22 @@ External_Resources_Manager::query_aircraft(SQLite::Database &db, }; std::lock_guard lock(mtx_); std::map> result; - const auto add_row = [&](const std::string &resource_name, + const auto add_row = [&](std::string_view resource_name, const std::vector &primary_key_values, - const std::string &result_name = std::string{}) { + std::string_view result_name = std::string{}) { auto &resource = get_resource(resource_name); auto row = resource.query_one(db, primary_key_values); if (!row) return std::shared_ptr{}; auto shared_row = std::make_shared(std::move(*row)); - result.emplace(result_name.empty() ? resource_name : result_name, + result.emplace(std::string(result_name.empty() ? resource_name : result_name), shared_row); return shared_row; }; std::optional type_code; for (const auto &resource_name : kAircraftResourceKeys) { - const auto row = add_row(resource_name, {icao24}); + const auto row = add_row(resource_name, std::vector{std::string(icao24)}); if (row && !type_code) { type_code = row->get("type_code"); if (!type_code) @@ -760,9 +761,9 @@ External_Resources_Manager::query_callsign( std::lock_guard lock(mtx_); std::map> result; - const auto add_row = [&](const std::string &resource_name, + const auto add_row = [&](std::string_view resource_name, const std::vector &primary_key_values, - const std::string &result_name = std::string{}) { + std::string_view result_name = std::string{}) { auto &resource = get_resource(resource_name); auto row = resource.query_one(db, primary_key_values); if (!row) @@ -821,12 +822,12 @@ SQLite::Database &External_Resources_Manager::require_db() const { } External_Resources &External_Resources_Manager::get_resource( - const std::string &resource_name) const { + std::string_view resource_name) const { for (const auto &resource : resources_) { if (resource->name == resource_name) return *resource; } - throw std::invalid_argument("unknown external resource: " + resource_name); + throw std::invalid_argument("unknown external resource: " + std::string(resource_name)); } std::vector diff --git a/module/Local_Server/External_Database/Resource_Utils.cpp b/module/Local_Server/External_Database/Resource_Utils.cpp index 9fa6e5f..468a310 100644 --- a/module/Local_Server/External_Database/Resource_Utils.cpp +++ b/module/Local_Server/External_Database/Resource_Utils.cpp @@ -14,6 +14,7 @@ #include #include #include +#include namespace External_Database_Utils { namespace { @@ -27,15 +28,15 @@ const std::vector kTar1090Columns = { "type_name", "year", "operator_info"}; const std::vector kTar1090PrimaryKey = {"icao24"}; -std::pair split_url(const std::string &url) { +std::pair split_url(std::string_view url) { const auto scheme_end = url.find("://"); if (scheme_end == std::string::npos) { - throw std::runtime_error("Invalid download URL: " + url); + throw std::runtime_error("Invalid download URL: " + std::string(url)); } const auto path_begin = url.find('/', scheme_end + 3); if (path_begin == std::string::npos) - return {url, "/"}; - return {url.substr(0, path_begin), url.substr(path_begin)}; + return {std::string(url), "/"}; + return {std::string(url.substr(0, path_begin)), std::string(url.substr(path_begin))}; } void replace_file(const std::filesystem::path &temp_file, @@ -51,7 +52,7 @@ void replace_file(const std::filesystem::path &temp_file, } std::string -create_csv_table_sql(const std::string &table_name, +create_csv_table_sql(std::string_view table_name, const std::vector &columns, const std::vector &primary_key_columns) { std::ostringstream sql; @@ -133,7 +134,7 @@ private: class Tar1090_Aircraft_Resource final : public External_Resources { public: - Tar1090_Aircraft_Resource(std::string name, std::string description, + Tar1090_Aircraft_Resource(std::string_view name, std::string_view description, const std::uint64_t update_interval_seconds) : External_Resources(std::move(name), "aircraft.csv", kTar1090Url, std::move(description), update_interval_seconds) {} @@ -205,7 +206,7 @@ protected: } // namespace -std::string quote_identifier(const std::string &value) { +std::string quote_identifier(std::string_view value) { std::string result = "\""; for (const char ch : value) { result += ch; @@ -216,33 +217,35 @@ std::string quote_identifier(const std::string &value) { return result; } -std::string normalize_key(std::string value) { +std::string normalize_key(std::string_view value) { + std::string result(value); const auto is_space = [](unsigned char ch) { return std::isspace(ch) != 0; }; - value.erase(value.begin(), - std::find_if(value.begin(), value.end(), + result.erase(result.begin(), + std::find_if(result.begin(), result.end(), [&](char ch) { return !is_space(ch); })); - value.erase(std::find_if(value.rbegin(), value.rend(), + result.erase(std::find_if(result.rbegin(), result.rend(), [&](char ch) { return !is_space(ch); }) - .base(), - value.end()); + .base(), + result.end()); std::transform( - value.begin(), value.end(), value.begin(), + result.begin(), result.end(), result.begin(), [](unsigned char ch) { return static_cast(std::toupper(ch)); }); - return value; + return result; } -std::optional normalize_field(std::string value) { +std::optional normalize_field(std::string_view value) { + std::string result(value); const auto is_space = [](unsigned char ch) { return std::isspace(ch) != 0; }; - value.erase(value.begin(), - std::find_if(value.begin(), value.end(), + result.erase(result.begin(), + std::find_if(result.begin(), result.end(), [&](char ch) { return !is_space(ch); })); - value.erase(std::find_if(value.rbegin(), value.rend(), + result.erase(std::find_if(result.rbegin(), result.rend(), [&](char ch) { return !is_space(ch); }) - .base(), - value.end()); - if (value.empty()) + .base(), + result.end()); + if (result.empty()) return std::nullopt; - return value; + return result; } void bind_optional(SQLite::Statement &statement, const int index, @@ -295,7 +298,7 @@ bool read_csv_row(std::istream &input, std::vector &fields, } std::string -make_upsert_sql(const std::string &table_name, +make_upsert_sql(std::string_view table_name, const std::vector &columns, const std::vector &primary_key_columns) { std::ostringstream sql; @@ -335,12 +338,13 @@ make_upsert_sql(const std::string &table_name, return sql.str(); } -void download_to_file(std::string url, +void download_to_file(std::string_view url, const std::filesystem::path &target_file) { std::filesystem::create_directories(target_file.parent_path()); constexpr int kMaxRedirects = 5; + auto current_url = std::string(url); for (int redirect = 0; redirect <= kMaxRedirects; ++redirect) { - const auto [origin, path] = split_url(url); + const auto [origin, path] = split_url(current_url); auto client = drogon::HttpClient::newHttpClient(origin); auto request = drogon::HttpRequest::newHttpRequest(); request->setMethod(drogon::Get); @@ -348,19 +352,19 @@ void download_to_file(std::string url, request->addHeader("User-Agent", "ECAP_Server external database updater"); const auto [result, response] = client->sendRequest(request, 600.0); if (result != drogon::ReqResult::Ok || !response) { - throw std::runtime_error("Download failed: " + url); + throw std::runtime_error("Download failed: " + current_url); } const int status = static_cast(response->getStatusCode()); if (status >= 300 && status < 400) { const auto location = response->getHeader("location"); if (location.empty()) - throw std::runtime_error("Redirect has no location: " + url); - url = location.front() == '/' ? origin + location : location; + throw std::runtime_error("Redirect has no location: " + current_url); + current_url = location.front() == '/' ? origin + location : location; continue; } if (status != 200) { throw std::runtime_error("Download returned HTTP " + - std::to_string(status) + ": " + url); + std::to_string(status) + ": " + current_url); } const auto temp_file = target_file.string() + ".tmp"; std::ofstream output(temp_file, std::ios::binary | std::ios::trunc); @@ -374,7 +378,7 @@ void download_to_file(std::string url, replace_file(temp_file, target_file); return; } - throw std::runtime_error("Too many redirects while downloading: " + url); + throw std::runtime_error("Too many redirects while downloading: " + current_url); } void decompress_gzip(const std::filesystem::path &gzip_file, @@ -404,7 +408,7 @@ void decompress_gzip(const std::filesystem::path &gzip_file, std::size_t import_header_csv( SQLite::Database &db, const std::filesystem::path &source_file, - const std::string &table_name, const std::vector &columns, + std::string_view table_name, const std::vector &columns, const std::vector &primary_key_columns, const char delimiter) { std::ifstream input(source_file, std::ios::binary); if (!input) @@ -478,7 +482,7 @@ make_schema_only_resource(Schema_Only_Resource_Config config) { } std::unique_ptr -make_tar1090_aircraft_resource(std::string name, std::string description, +make_tar1090_aircraft_resource(std::string_view name, std::string_view description, const std::uint64_t update_interval_seconds) { return std::make_unique( std::move(name), std::move(description), update_interval_seconds); diff --git a/module/Local_Server/External_Database/Resource_Utils.h b/module/Local_Server/External_Database/Resource_Utils.h index 87d3ca2..587c8a2 100644 --- a/module/Local_Server/External_Database/Resource_Utils.h +++ b/module/Local_Server/External_Database/Resource_Utils.h @@ -1,4 +1,5 @@ #pragma once +#include #include "global.h" @@ -33,24 +34,24 @@ struct Schema_Only_Resource_Config { std::vector primary_key_columns; }; -std::string quote_identifier(const std::string &value); -std::string normalize_key(std::string value); -std::optional normalize_field(std::string value); +std::string quote_identifier(std::string_view value); +std::string normalize_key(std::string_view value); +std::optional normalize_field(std::string_view value); void bind_optional(SQLite::Statement &statement, int index, const std::optional &value); bool read_csv_row(std::istream &input, std::vector &fields, char delimiter); std::string -make_upsert_sql(const std::string &table_name, +make_upsert_sql(std::string_view table_name, const std::vector &columns, const std::vector &primary_key_columns); -void download_to_file(std::string url, +void download_to_file(std::string_view url, const std::filesystem::path &target_file); void decompress_gzip(const std::filesystem::path &gzip_file, const std::filesystem::path &target_file); std::size_t import_header_csv( SQLite::Database &db, const std::filesystem::path &source_file, - const std::string &table_name, const std::vector &columns, + std::string_view table_name, const std::vector &columns, const std::vector &primary_key_columns, char delimiter = ','); std::unique_ptr @@ -58,7 +59,7 @@ make_header_csv_resource(Header_Csv_Resource_Config config); std::unique_ptr make_schema_only_resource(Schema_Only_Resource_Config config); std::unique_ptr -make_tar1090_aircraft_resource(std::string name, std::string description, +make_tar1090_aircraft_resource(std::string_view name, std::string_view description, std::uint64_t update_interval_seconds); } // namespace External_Database_Utils diff --git a/module/Local_Server/External_Database/global.h b/module/Local_Server/External_Database/global.h index 5b817ef..889c04d 100644 --- a/module/Local_Server/External_Database/global.h +++ b/module/Local_Server/External_Database/global.h @@ -1,4 +1,5 @@ #pragma once +#include #include "Core/Base/JSON.h" #include #include @@ -22,7 +23,7 @@ struct External_Database_Row { External_Database_Row& operator=(const External_Database_Row&) = default; External_Database_Row(External_Database_Row&&) noexcept = default; External_Database_Row& operator=(External_Database_Row&&) noexcept = default; - [[nodiscard]] std::optional get(const std::string& column) const; + [[nodiscard]] std::optional get(std::string_view column) const; [[nodiscard]] Psc::JSON to_json() const; }; using External_Database_Row_Map = @@ -45,8 +46,8 @@ public: }; class External_Resources : public External_Resources_Data { public: - External_Resources(std::string name, std::string cache_file_name, - std::string download_url, std::string description, + External_Resources(std::string_view name, std::string_view cache_file_name, + std::string_view download_url, std::string_view description, std::uint64_t update_interval_seconds); virtual ~External_Resources() = default; [[nodiscard]] std::size_t row_count(SQLite::Database& db) const; @@ -86,47 +87,47 @@ public: void init(const Psc::JSON* that_json); [[nodiscard]] Psc::JSON to_base_json() const; void server(Global* g); - void load_sqlite_db(std::string path); + void load_sqlite_db(std::string_view path); std::vector refresh_external_databases(bool force_download = true); - External_Resource_Status refresh_external_database(const std::string& resource_name, bool force_download = true); - External_Resource_Status import_external_database(const std::string& resource_name, const std::filesystem::path& source_file); - External_Resource_Status clear_external_database_table(const std::string& resource_name); - [[nodiscard]] std::optional query_external_database(const std::string& resource_name, const std::vector& primary_key_values) const; - [[nodiscard]] std::map> query_aircraft_external_databases(const std::string& icao24) const; + External_Resource_Status refresh_external_database(std::string_view resource_name, bool force_download = true); + External_Resource_Status import_external_database(std::string_view resource_name, const std::filesystem::path& source_file); + External_Resource_Status clear_external_database_table(std::string_view resource_name); + [[nodiscard]] std::optional query_external_database(std::string_view resource_name, const std::vector& primary_key_values) const; + [[nodiscard]] std::map> query_aircraft_external_databases(std::string_view icao24) const; [[nodiscard]] std::map> query_callsign_external_databases(const std::optional& callsign) const; [[nodiscard]] std::vector external_database_status() const; void async_refresh_external_databases(bool force_download, Status_List_Callback callback); - void async_refresh_external_database(std::string resource_name, bool force_download, Status_Callback callback); - void async_import_external_database(std::string resource_name, std::filesystem::path source_file, Status_Callback callback); - void async_clear_external_database_table(std::string resource_name, Status_Callback callback); - void async_query_external_database(std::string resource_name, std::vector primary_key_values, Row_Callback callback) const; - void async_query_aircraft_external_databases(std::string icao24, Row_Map_Callback callback) const; + void async_refresh_external_database(std::string_view resource_name, bool force_download, Status_Callback callback); + void async_import_external_database(std::string_view resource_name, std::filesystem::path source_file, Status_Callback callback); + void async_clear_external_database_table(std::string_view resource_name, Status_Callback callback); + void async_query_external_database(std::string_view resource_name, std::vector primary_key_values, Row_Callback callback) const; + void async_query_aircraft_external_databases(std::string_view icao24, Row_Map_Callback callback) const; void async_query_callsign_external_databases(std::optional callsign, Row_Map_Callback callback) const; void async_external_database_status(Status_List_Callback callback) const; [[nodiscard]] asio::awaitable> refresh_external_databases_coro(bool force_download = true); - [[nodiscard]] asio::awaitable refresh_external_database_coro(std::string resource_name, bool force_download = true); - [[nodiscard]] asio::awaitable import_external_database_coro(std::string resource_name, std::filesystem::path source_file); - [[nodiscard]] asio::awaitable clear_external_database_table_coro(std::string resource_name); - [[nodiscard]] asio::awaitable> query_external_database_coro(std::string resource_name, std::vector primary_key_values) const; - [[nodiscard]] asio::awaitable> query_aircraft_external_databases_coro(std::string icao24) const; + [[nodiscard]] asio::awaitable refresh_external_database_coro(std::string_view resource_name, bool force_download = true); + [[nodiscard]] asio::awaitable import_external_database_coro(std::string_view resource_name, std::filesystem::path source_file); + [[nodiscard]] asio::awaitable clear_external_database_table_coro(std::string_view resource_name); + [[nodiscard]] asio::awaitable> query_external_database_coro(std::string_view resource_name, std::vector primary_key_values) const; + [[nodiscard]] asio::awaitable> query_aircraft_external_databases_coro(std::string_view icao24) const; [[nodiscard]] asio::awaitable> query_callsign_external_databases_coro(std::optional callsign) const; [[nodiscard]] asio::awaitable> external_database_status_coro() const; void register_external_resource(std::unique_ptr external_res); void initialize(SQLite::Database& db, std::filesystem::path cache_pos); std::vector sync_missing(SQLite::Database& db); std::vector refresh_all(SQLite::Database& db, bool force_download = true); - External_Resource_Status refresh_one(SQLite::Database& db, const std::string& resource_name, bool force_download = true); - External_Resource_Status import_offline(SQLite::Database& db, const std::string& resource_name, const std::filesystem::path& source_file); - External_Resource_Status clear_table(SQLite::Database& db, const std::string& resource_name); - [[nodiscard]] std::optional query_one(SQLite::Database& db, const std::string& resource_name, const std::vector& primary_key_values) const; - [[nodiscard]] std::map> query_aircraft(SQLite::Database& db, const std::string& icao24) const; + External_Resource_Status refresh_one(SQLite::Database& db, std::string_view resource_name, bool force_download = true); + External_Resource_Status import_offline(SQLite::Database& db, std::string_view resource_name, const std::filesystem::path& source_file); + External_Resource_Status clear_table(SQLite::Database& db, std::string_view resource_name); + [[nodiscard]] std::optional query_one(SQLite::Database& db, std::string_view resource_name, const std::vector& primary_key_values) const; + [[nodiscard]] std::map> query_aircraft(SQLite::Database& db, std::string_view icao24) const; [[nodiscard]] std::map> query_callsign(SQLite::Database& db, const std::optional& callsign) const; [[nodiscard]] std::vector status(SQLite::Database& db) const; std::string ecap_sqlite_path; std::filesystem::path cache_pos_; private: [[nodiscard]] SQLite::Database& require_db() const; - External_Resources& get_resource(const std::string& resource_name) const; + External_Resources& get_resource(std::string_view resource_name) const; std::vector update_all(SQLite::Database& db, bool force_download, bool only_when_empty); std::unique_ptr db_; std::vector> resources_; diff --git a/module/Local_Server/global_include.h b/module/Local_Server/global_include.h index 8188fbd..54cf959 100644 --- a/module/Local_Server/global_include.h +++ b/module/Local_Server/global_include.h @@ -14,6 +14,7 @@ #include #include #include +#include class Global; @@ -251,7 +252,7 @@ public: } void add() { add_inter(); } void add_crc_error() { crc_error_num++; } - void add_sub_part(const std::string &key) { add_sub_part_inter(key); } + void add_sub_part(std::string_view key) { add_sub_part_inter(key); } // Psc::Speed_Statistics speed; protected: @@ -266,7 +267,7 @@ protected: // speed.update(1); } - void add_sub_part_inter(const std::string &key) { + void add_sub_part_inter(std::string_view key) { auto t = get_create_statistic_data(key); t->total_num++; auto cur_time = std::time(nullptr); @@ -276,14 +277,15 @@ protected: } t->pre_second_num++; } - Statistic_Data *get_create_statistic_data(const std::string &key) { + Statistic_Data *get_create_statistic_data(std::string_view key) { Statistic_Data *t; - auto iter = statistic_map.find(key); + auto key_string = std::string(key); + auto iter = statistic_map.find(key_string); if (iter == statistic_map.end()) { Statistic_Data cur{}; - statistic_map.insert(std::make_pair(key, cur)); + statistic_map.insert(std::make_pair(key_string, cur)); } - t = &statistic_map[key]; + t = &statistic_map[key_string]; return t; } @@ -337,7 +339,7 @@ public: return ret; } - void add_length_error(const std::string &key) { length_error_num++; } + void add_length_error(std::string_view key) { length_error_num++; } void add_cpr_error(SSR::CPR_Error_Type cet) { ++cpr_error[cet]; } diff --git a/module/Local_Server/server/Config.cpp b/module/Local_Server/server/Config.cpp index bcc8dc8..dbc4361 100644 --- a/module/Local_Server/server/Config.cpp +++ b/module/Local_Server/server/Config.cpp @@ -3,6 +3,7 @@ #include "Core/Net_Adapter/Net_Adapter.h" #include "Global.h" #include +#include #undef interface std::string default_config_path; @@ -124,9 +125,9 @@ void Device_Config::server(Global *g) { buffer << ifs.rdbuf(); interface = buffer.str(); } - static auto set = [](std::string &interface, const std::string &token, - const std::string &value) { - std::string var_name = "${" + token + "}"; + static auto set = [](std::string &interface, std::string_view token, + std::string_view value) { + std::string var_name = "${" + std::string(token) + "}"; auto size = var_name.size(); size_t pos = interface.find(var_name); while (pos != std::string::npos) { diff --git a/module/Local_Server/server/Global.cpp b/module/Local_Server/server/Global.cpp index 0fbf67e..f82b237 100644 --- a/module/Local_Server/server/Global.cpp +++ b/module/Local_Server/server/Global.cpp @@ -4,6 +4,7 @@ #include #include #include +#include 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(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 bds_list, + std::string_view field_name, std::vector bds_list, void *, SSR::P_S msg) { auto src = std::dynamic_pointer_cast(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 &prefix_list, const std::function &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 &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"); diff --git a/module/Local_Server/server/Global.h b/module/Local_Server/server/Global.h index 68b7694..36db7fa 100644 --- a/module/Local_Server/server/Global.h +++ b/module/Local_Server/server/Global.h @@ -1,4 +1,5 @@ #pragma once +#include @@ -23,12 +24,12 @@ // 集中 管理日志 using namespace Psc; extern BaseLogger* server_logger; -std::string to_file_name(std::string str); +std::string to_file_name(std::string_view str); std::string inet_address_to_string(const trantor::InetAddress &addr); using Serial_Number_Type = unsigned int; struct Debug_Logger_Info_Manager { - void push_info(const std::string& content); + void push_info(std::string_view content); std::string get_info(Serial_Number_Type serial_number); Serial_Number_Type get_cur_serial_number(); struct Info { @@ -74,7 +75,7 @@ public: std::string fall = "fall_"; using Handler = std::function; using CoroHandler = std::function(const drogon::HttpRequestPtr&, const drogon::HttpResponsePtr&)>; - bool listen(const std::string& host, int port); + bool listen(std::string_view host, int port); ~Web_Server() = default; @@ -87,9 +88,9 @@ public: drogon::app().quit(); } - Web_Server& Post(const std::string& pattern, Handler handler) { + Web_Server& Post(std::string_view pattern, Handler handler) { drogon::app().registerHandler( - pattern, + std::string(pattern), [handler](const drogon::HttpRequestPtr& request, std::function&& callback) { auto resp = drogon::HttpResponse::newHttpResponse(); @@ -105,9 +106,9 @@ public: return *this; } - Web_Server& PostCoro(const std::string& pattern, CoroHandler handler) { + Web_Server& PostCoro(std::string_view pattern, CoroHandler handler) { drogon::app().registerHandler( - pattern, + std::string(pattern), [handler = std::move(handler)]( const drogon::HttpRequestPtr& request, std::function&& callback) { @@ -135,9 +136,9 @@ public: return *this; } - Web_Server& Get(const std::string& pattern, Handler handler) { + Web_Server& Get(std::string_view pattern, Handler handler) { drogon::app().registerHandlerViaRegex( - pattern, + std::string(pattern), [handler](const drogon::HttpRequestPtr& request, std::function&& callback) { auto resp = drogon::HttpResponse::newHttpResponse(); @@ -153,9 +154,9 @@ public: return *this; } - Web_Server& GetCoro(const std::string& pattern, CoroHandler handler) { + Web_Server& GetCoro(std::string_view pattern, CoroHandler handler) { drogon::app().registerHandlerViaRegex( - pattern, + std::string(pattern), [handler = std::move(handler)]( const drogon::HttpRequestPtr& request, std::function&& callback) { @@ -272,8 +273,8 @@ public: Global(); ~Global(); Detach_Thread_Manager thread_manager; - std::shared_ptr source(const std::string& data_source_key) { - return mode_acs.data_source_config.map.get(data_source_key).value_or(nullptr); + std::shared_ptr source(std::string_view data_source_key) { + return mode_acs.data_source_config.map.get(std::string(data_source_key)).value_or(nullptr); } std::shared_ptr total_source() { for (auto i : mode_acs.data_source_config.map.list()) @@ -293,8 +294,8 @@ public: -void handle_buffer_muti_start(std::string& buffer, const std::string& data, const std::set& prefix_list, +void handle_buffer_muti_start(std::string& buffer, std::string_view data, const std::set& prefix_list, const std::function& callback); -void handle_buffer_head_tail(std::string& buffer, const std::string& data, const std::string& prefix, - const std::string& suffix, const std::function& callback); +void handle_buffer_head_tail(std::string& buffer, std::string_view data, std::string_view prefix, + std::string_view suffix, const std::function& callback); diff --git a/module/Local_Server/server/MLAT.cpp b/module/Local_Server/server/MLAT.cpp index 322d690..d9be0a8 100644 --- a/module/Local_Server/server/MLAT.cpp +++ b/module/Local_Server/server/MLAT.cpp @@ -3,10 +3,11 @@ #include "Global.h" #include +#include -time_t datetime_to_timestamp(const std::string &datetime) { +time_t datetime_to_timestamp(std::string_view datetime) { std::tm tm = {}; - std::istringstream ss(datetime); + std::istringstream ss{std::string(datetime)}; ss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); if (ss.fail()) { throw std::runtime_error("时间格式错误"); diff --git a/module/Local_Server/server/Mode_Msg_Buffer.h b/module/Local_Server/server/Mode_Msg_Buffer.h index c5ecebd..709bae4 100644 --- a/module/Local_Server/server/Mode_Msg_Buffer.h +++ b/module/Local_Server/server/Mode_Msg_Buffer.h @@ -3,6 +3,7 @@ #include "../global_include.h" #include +#include struct Mode_Msg_Buffer { void push(const std::shared_ptr &msg) { @@ -37,7 +38,7 @@ protected: }; struct BIN_Msg_Buffer { - void push(const std::string &msg); + void push(std::string_view msg); const std::vector &get_all(); std::atomic mode_s_msg_num{}; diff --git a/module/Local_Server/server/Performance_Monitor.h b/module/Local_Server/server/Performance_Monitor.h index ff33b20..c0d85ca 100644 --- a/module/Local_Server/server/Performance_Monitor.h +++ b/module/Local_Server/server/Performance_Monitor.h @@ -1,4 +1,5 @@ #pragma once +#include #include @@ -38,7 +39,7 @@ public: class Scope_Timer { public: - Scope_Timer(std::string name, const std::size_t threshold_ms) + Scope_Timer(std::string_view name, const std::size_t threshold_ms) : name_(std::move(name)), threshold_ms_(threshold_ms), start_(std::chrono::steady_clock::now()) {} diff --git a/module/Local_Server/server/Source_Feed_Relation.h b/module/Local_Server/server/Source_Feed_Relation.h index 941e3ad..1e7be9d 100644 --- a/module/Local_Server/server/Source_Feed_Relation.h +++ b/module/Local_Server/server/Source_Feed_Relation.h @@ -3,6 +3,7 @@ #include "../global_include.h" #include "Core/Serial/Serial.h" +#include struct Source_Feed_Relation { std::string key; @@ -47,7 +48,7 @@ struct First_Source_To_All_Feed_Relation : Source_Feed_Relation { }; inline std::shared_ptr -create_source_feed_relation_from_type(const std::string &t) { +create_source_feed_relation_from_type(std::string_view t) { std::shared_ptr ret{}; if (t == "One_to_One_Relation") ret = std::make_shared(); @@ -56,7 +57,7 @@ create_source_feed_relation_from_type(const std::string &t) { else { std::cout << "未知的 Source_Feed_Relation type 类型! t:[" << t << "]" << std::endl; - throw std::invalid_argument("unknown Source_Feed_Relation type: " + t); + throw std::invalid_argument("unknown Source_Feed_Relation type: " + std::string(t)); } return ret; } diff --git a/module/Local_Server/server/WebSocket_Manager.cpp b/module/Local_Server/server/WebSocket_Manager.cpp index 2b4b246..300ba38 100644 --- a/module/Local_Server/server/WebSocket_Manager.cpp +++ b/module/Local_Server/server/WebSocket_Manager.cpp @@ -4,6 +4,7 @@ #include #include #include +#include class DSP_Ws_Mgr : public drogon::WebSocketController { public: static DSP_Ws_Mgr *instance() { return inst_; } @@ -26,8 +27,8 @@ struct WebSocket_Connection { std::string type; }; -WebSocket_Manager::WebSocket_Manager(std::string path) - : path(std::move(path)) {} +WebSocket_Manager::WebSocket_Manager(std::string_view path) + : path(path) {} void WebSocket_Manager::remove(const drogon::WebSocketConnectionPtr &conn) { std::lock_guard g(mtx); connections.erase(conn); @@ -55,20 +56,21 @@ size_t WebSocket_Manager::get_websocket_connect_num() { return connections.size(); } -std::shared_ptr Ws_Mgr::register_ws(std::string path) { - auto it = map.find(path); +std::shared_ptr Ws_Mgr::register_ws(std::string_view path) { + auto path_string = std::string(path); + auto it = map.find(path_string); if (it != map.end()) { - Psc::fail_fast_core_dump("register_ws:" + VAR_STR_1(path) + "重复创建!"); + Psc::fail_fast_core_dump("register_ws:" + VAR_STR_1(path_string) + "重复创建!"); return it->second; } std::shared_ptr cur = - std::make_shared(path); - map[path] = cur; + std::make_shared(path_string); + map[path_string] = cur; return cur; } -std::shared_ptr Ws_Mgr::get_ws(std::string path) { - auto it = map.find(path); +std::shared_ptr Ws_Mgr::get_ws(std::string_view path) { + auto it = map.find(std::string(path)); if (it != map.end()) { return it->second; } @@ -111,4 +113,4 @@ void DSP_Ws_Mgr::handleNewConnection( conn->setContext(std::make_shared(std::move(s))); ws->add(conn); } -DSP_Ws_Mgr::DSP_Ws_Mgr() { inst_ = this; } \ No newline at end of file +DSP_Ws_Mgr::DSP_Ws_Mgr() { inst_ = this; } diff --git a/module/Local_Server/server/WebSocket_Manager.h b/module/Local_Server/server/WebSocket_Manager.h index 62f7ab4..64863ce 100644 --- a/module/Local_Server/server/WebSocket_Manager.h +++ b/module/Local_Server/server/WebSocket_Manager.h @@ -1,4 +1,5 @@ #pragma once +#include #include "Core/Base/global_include.h" #include "Core/socket/ByteOrder.h" @@ -10,7 +11,7 @@ class WebSocket_Manager { public: - explicit WebSocket_Manager(std::string path); + explicit WebSocket_Manager(std::string_view path); ~WebSocket_Manager() = default; void remove(const drogon::WebSocketConnectionPtr &conn); void add(const drogon::WebSocketConnectionPtr &conn); @@ -26,8 +27,8 @@ protected: class Ws_Mgr : public Psc::Singleton { public: - std::shared_ptr register_ws(std::string path); - std::shared_ptr get_ws(std::string path); + std::shared_ptr register_ws(std::string_view path); + std::shared_ptr get_ws(std::string_view path); std::map> map; }; diff --git a/module/Local_Server/server/With_Loop_Coro.cpp b/module/Local_Server/server/With_Loop_Coro.cpp index c5d45a7..9d51fcb 100644 --- a/module/Local_Server/server/With_Loop_Coro.cpp +++ b/module/Local_Server/server/With_Loop_Coro.cpp @@ -1,5 +1,6 @@ #include "With_Loop_Coro.h" #include "io_coro.h" +#include With_Loop_Coro::~With_Loop_Coro() = default; void With_Loop_Coro::async_stop() { std::string name = type + ":" + key; @@ -21,7 +22,7 @@ void With_Loop_Coro::sync_wait() { bool With_Loop_Coro::running() const { return loop_running; } -void With_Loop_Coro::set_state(State state, std::string action) { +void With_Loop_Coro::set_state(State state, std::string_view action) { if (!action.empty()) { std::string name = type + "_" + key; std::cout << std::format("{} {} {} ==> {} \n", name, action, Psc::to_string(this->state), Psc::to_string(state)); @@ -81,7 +82,7 @@ asio::awaitable With_Loop_Coro::tick() { co_return; } if (!enable) { - set_state(State::Before_Request_Stop_Loop, std::format("{} 检测到 enable变化 异步退出开始!", name).c_str()); + set_state(State::Before_Request_Stop_Loop, std::format("{} 检测到 enable变化 异步退出开始!", name)); } } else if (state == State::Before_Request_Stop_Loop) { diff --git a/module/Local_Server/server/With_Loop_Coro.h b/module/Local_Server/server/With_Loop_Coro.h index 258689c..47c381e 100644 --- a/module/Local_Server/server/With_Loop_Coro.h +++ b/module/Local_Server/server/With_Loop_Coro.h @@ -1,4 +1,5 @@ #pragma once +#include #include #include #include @@ -40,7 +41,7 @@ public: Before_Request_Stop_Loop, Waiting_Stop_Loop } state = State::Start; - void set_state(State state, std::string action = ""); + void set_state(State state, std::string_view action = ""); With_Loop_Coro(); protected: Psc::Copyable_Atomic loop_running{}; diff --git a/module/Local_Server/server/libarchive.cpp b/module/Local_Server/server/libarchive.cpp index 0c6f12a..1fea107 100644 --- a/module/Local_Server/server/libarchive.cpp +++ b/module/Local_Server/server/libarchive.cpp @@ -13,6 +13,7 @@ #include #include #include +#include namespace fs = std::filesystem; @@ -20,19 +21,19 @@ namespace { constexpr std::size_t kArchiveBlockSize = 64 * 1024; -[[noreturn]] void throw_invalid_archive(const std::string &reason) { - throw Invalid_Archive_Error("invalid upgrade archive: " + reason); +[[noreturn]] void throw_invalid_archive(std::string_view reason) { + throw Invalid_Archive_Error("invalid upgrade archive: " + std::string(reason)); } -std::string archive_error_text(archive *a, const std::string &stage) { +std::string archive_error_text(archive *a, std::string_view stage) { const char *err = archive_error_string(a); if (err == nullptr || *err == '\0') { - return stage; + return std::string(stage); } - return stage + ": " + err; + return std::string(stage) + ": " + err; } -void require_archive_ok(archive *a, int code, const std::string &stage) { +void require_archive_ok(archive *a, int code, std::string_view stage) { if (code != ARCHIVE_OK) { throw std::runtime_error(archive_error_text(a, stage)); } @@ -57,7 +58,7 @@ bool path_is_within(const fs::path &base, const fs::path &target) { return true; } -std::string normalize_archive_path(const std::string &raw, +std::string normalize_archive_path(std::string_view raw, bool allow_empty = false) { if (raw.empty()) { if (allow_empty) @@ -66,7 +67,7 @@ std::string normalize_archive_path(const std::string &raw, } if (raw.front() == '/' || raw.find('\\') != std::string::npos || raw.find(':') != std::string::npos) { - throw_invalid_archive("unsafe entry path: " + raw); + throw_invalid_archive("unsafe entry path: " + std::string(raw)); } std::string normalized; @@ -74,9 +75,9 @@ std::string normalize_archive_path(const std::string &raw, while (start < raw.size()) { const std::size_t slash = raw.find('/', start); const std::size_t end = slash == std::string::npos ? raw.size() : slash; - const std::string component = raw.substr(start, end - start); + const std::string component(raw.substr(start, end - start)); if (component.empty() || component == "." || component == "..") { - throw_invalid_archive("unsafe entry path: " + raw); + throw_invalid_archive("unsafe entry path: " + std::string(raw)); } if (!normalized.empty()) normalized.push_back('/'); @@ -111,13 +112,13 @@ bool is_regular_entry(archive_entry *entry) { } void reject_unsupported_entry_type(archive_entry *entry, - const std::string &path) { + std::string_view path) { const auto type = archive_entry_filetype(entry); if (type == AE_IFLNK) { - throw_invalid_archive("symbolic link is not allowed: " + path); + throw_invalid_archive("symbolic link is not allowed: " + std::string(path)); } if (type != AE_IFDIR && type != AE_IFREG && type != 0) { - throw_invalid_archive("special file is not allowed: " + path); + throw_invalid_archive("special file is not allowed: " + std::string(path)); } } @@ -128,7 +129,7 @@ void setup_archive_reader(archive *a) { "archive_read_support_format_all failed"); } -void consume_entry_data_for_validation(archive *a, const std::string &path, +void consume_entry_data_for_validation(archive *a, std::string_view path, const Archive_Layout_Rules &rules, std::uint64_t &total_uncompressed_size) { std::uint64_t entry_size = 0; @@ -143,12 +144,12 @@ void consume_entry_data_for_validation(archive *a, const std::string &path, } if (result != ARCHIVE_OK) { throw_invalid_archive( - archive_error_text(a, "cannot read entry: " + path)); + archive_error_text(a, "cannot read entry: " + std::string(path))); } if (block_size > rules.max_entry_uncompressed_size || entry_size > rules.max_entry_uncompressed_size - block_size) { - throw_invalid_archive("entry size exceeds limit: " + path); + throw_invalid_archive("entry size exceeds limit: " + std::string(path)); } if (block_size > rules.max_total_uncompressed_size || total_uncompressed_size > @@ -162,18 +163,18 @@ void consume_entry_data_for_validation(archive *a, const std::string &path, } void consume_entry_data_for_validation(archive *a, archive_entry *entry, - const std::string &path, + std::string_view path, const Archive_Layout_Rules &rules, std::uint64_t &total_uncompressed_size) { if (archive_entry_size_is_set(entry)) { const auto expected_size = archive_entry_size(entry); if (expected_size < 0) { - throw_invalid_archive("negative entry size: " + path); + throw_invalid_archive("negative entry size: " + std::string(path)); } const auto size = static_cast(expected_size); if (size > rules.max_entry_uncompressed_size || size > rules.max_total_uncompressed_size) { - throw_invalid_archive("entry size exceeds limit: " + path); + throw_invalid_archive("entry size exceeds limit: " + std::string(path)); } } @@ -231,7 +232,7 @@ Read_Archive_Ptr make_archive_reader() { return reader; } -bool is_safe_archive_name_token(const std::string &value) { +bool is_safe_archive_name_token(std::string_view value) { if (value.empty()) { return false; } diff --git a/module/Local_Server/server/server.cpp b/module/Local_Server/server/server.cpp index c5bdfe7..224dee1 100644 --- a/module/Local_Server/server/server.cpp +++ b/module/Local_Server/server/server.cpp @@ -52,28 +52,29 @@ bool Is_Safe_Archive_Extension(std::string_view extension) { }); } -std::string Normalize_Archive_Extension(std::string extension, - std::string fallback = "zip") { - while (!extension.empty() && extension.front() == '.') { - extension.erase(extension.begin()); +std::string Normalize_Archive_Extension(std::string_view extension, + std::string_view fallback = "zip") { + auto normalized = std::string(extension); + while (!normalized.empty() && normalized.front() == '.') { + normalized.erase(normalized.begin()); } - if (extension.empty()) { - extension = std::move(fallback); + if (normalized.empty()) { + normalized = std::string(fallback); } - if (!Is_Safe_Archive_Extension(extension)) { - throw std::invalid_argument("invalid archive extension: " + extension); + if (!Is_Safe_Archive_Extension(normalized)) { + throw std::invalid_argument("invalid archive extension: " + normalized); } - return extension; + return normalized; } std::optional Try_Get_String_Field(const JSON &object, - const std::string &key) { + std::string_view key) { const JSON *value = object.get(key); if (value == nullptr) { return std::nullopt; } if (value->valueType != Psc::String) { - throw std::invalid_argument(key + " must be a string"); + throw std::invalid_argument(std::string(key) + " must be a string"); } return value->val; } @@ -85,7 +86,7 @@ struct Archive_Export_Request { Archive_Export_Request Parse_Archive_Export_Request(const drogon::HttpRequestPtr &req, - std::string default_version) { + std::string_view default_version) { Archive_Export_Request result; result.version = std::move(default_version); @@ -155,7 +156,7 @@ void Global::init_web_server() { static auto &web_server = web_server_config; Web_Server &svr = this->svr; auto &da = drogon::app(); - auto return_file = [](const std::string &path) { + auto return_file = [](std::string_view path) { auto res = drogon::HttpResponse::newHttpResponse(); if (std::filesystem::exists(path)) { std::string content; @@ -175,9 +176,9 @@ void Global::init_web_server() { } return res; }; - auto add_path = [return_file](const std::string &path) { + auto add_path = [return_file](std::string_view path) { drogon::app().registerHandlerViaRegex( - path, + std::string(path), [return_file]( const drogon::HttpRequestPtr &req, std::function &&callback) { @@ -251,7 +252,7 @@ void Global::init_web_server() { try { auto export_request = Parse_Archive_Export_Request(req, Global::instance()->version); - const std::string &name = export_request.version; + std::string name = export_request.version; auto version_dir = std::filesystem::path(get_exe_dir() + "/.."); std::string data = archive_directory_to_memory( version_dir / name / "logs", {}, export_request.archive); @@ -260,7 +261,7 @@ void Global::init_web_server() { resp->setContentTypeString("application/octet-stream"); resp->addHeader("Content-Disposition", "attachment; filename*=UTF-8''" + name + "_logs." + - export_request.archive.extension); + std::string(export_request.archive.extension)); resp->addHeader("ok", "true"); cb(resp); } @@ -283,7 +284,7 @@ void Global::init_web_server() { try { auto export_request = Parse_Archive_Export_Request(req, Global::instance()->version); - const std::string &name = export_request.version; + std::string name = export_request.version; auto version_dir = std::filesystem::path(get_exe_dir() + "/.."); std::cout << "准备压缩:" << std::endl; @@ -292,7 +293,7 @@ void Global::init_web_server() { {"logs/", "uploads/", "drogon_uploads/", "backups/", // ghw的什么文件路径 "stack_trace.txt", "pt.log", "ecap_server.log", "Core", "core", - name + ".zip", name + "." + export_request.archive.extension}, + name + ".zip", name + "." + std::string(export_request.archive.extension)}, export_request.archive); std::cout << "压缩成功:" << data.size() << std::endl; auto resp = drogon::HttpResponse::newHttpResponse(); @@ -300,7 +301,7 @@ void Global::init_web_server() { resp->setContentTypeString("application/octet-stream"); resp->addHeader("Content-Disposition", "attachment; filename*=UTF-8''" + name + "." + - export_request.archive.extension); + std::string(export_request.archive.extension)); resp->addHeader("ok", "true"); cb(resp); } catch (const std::exception &e) { @@ -327,10 +328,10 @@ void Global::init_web_server() { &&cb) { #ifdef __linux__ - std::string root_dir = Psc::get_exe_dir() + "/.."; + std::string_view root_dir = Psc::get_exe_dir() + "/.."; - std::string log_file = fmt::format("{}/restart_device.log", root_dir); - std::string cmd = fmt::format( + std::string_view log_file = fmt::format("{}/restart_device.log", root_dir); + std::string_view cmd = fmt::format( R"(systemd-run --scope --slice=system.slice sudo bash "{}/restart_device.bash" > {} 2>&1 &)", root_dir, log_file); std::cout << "Generated Command: " << cmd << std::endl; diff --git a/module/Local_Server_main.cpp b/module/Local_Server_main.cpp index eecf7ca..9e6d6bd 100644 --- a/module/Local_Server_main.cpp +++ b/module/Local_Server_main.cpp @@ -10,6 +10,7 @@ #include #include #include "Local_Server/server/io_coro.h" +#include // ./server ./config.json #ifdef __linux__ #include @@ -87,7 +88,7 @@ int psc_main(int argc, char* argv[]) { std::cout << " 正常退出" << std::endl; }; auto g = Global::instance(); - Psc::set_fail_fast([](const std::string& name) { + Psc::set_fail_fast([](std::string_view name) { // 如果是在 Global::instance() 里面失败是不能调用这个处理函数的 auto g = Global::instance(); std::cout << "set_fail_fast 退出原因: 222" << name << std::endl; diff --git a/module/Radarcape_Core/cpp-httplib/httplib.h b/module/Radarcape_Core/cpp-httplib/httplib.h index 58b504f..4a76313 100644 --- a/module/Radarcape_Core/cpp-httplib/httplib.h +++ b/module/Radarcape_Core/cpp-httplib/httplib.h @@ -1,3 +1,4 @@ +#include // // httplib.h // @@ -364,7 +365,7 @@ inline unsigned char to_lower(int c) { return table[(unsigned char)(char)c]; } -inline bool equal(const std::string &a, const std::string &b) { +inline bool equal(std::string_view a, std::string_view b) { return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin(), [](char ca, char cb) { return to_lower(ca) == to_lower(cb); @@ -372,13 +373,13 @@ inline bool equal(const std::string &a, const std::string &b) { } struct equal_to { - bool operator()(const std::string &a, const std::string &b) const { + bool operator()(std::string_view a, std::string_view b) const { return equal(a, b); } }; struct hash { - size_t operator()(const std::string &key) const { + size_t operator()(std::string_view key) const { return hash_core(key.data(), key.size(), 0); } @@ -636,23 +637,23 @@ struct Request { const SSL *ssl = nullptr; #endif - bool has_header(const std::string &key) const; - std::string get_header_value(const std::string &key, const char *def = "", + bool has_header(std::string_view key) const; + std::string get_header_value(std::string_view key, const char *def = "", size_t id = 0) const; - uint64_t get_header_value_u64(const std::string &key, uint64_t def = 0, + uint64_t get_header_value_u64(std::string_view key, uint64_t def = 0, size_t id = 0) const; - size_t get_header_value_count(const std::string &key) const; - void set_header(const std::string &key, const std::string &val); + size_t get_header_value_count(std::string_view key) const; + void set_header(std::string_view key, std::string_view val); - bool has_param(const std::string &key) const; - std::string get_param_value(const std::string &key, size_t id = 0) const; - size_t get_param_value_count(const std::string &key) const; + bool has_param(std::string_view key) const; + std::string get_param_value(std::string_view key, size_t id = 0) const; + size_t get_param_value_count(std::string_view key) const; bool is_multipart_form_data() const; - bool has_file(const std::string &key) const; - MultipartFormData get_file_value(const std::string &key) const; - std::vector get_file_values(const std::string &key) const; + bool has_file(std::string_view key) const; + MultipartFormData get_file_value(std::string_view key) const; + std::vector get_file_values(std::string_view key) const; // private members... size_t redirect_count_ = CPPHTTPLIB_REDIRECT_MAX_COUNT; @@ -670,34 +671,34 @@ struct Response { std::string body; std::string location; // Redirect location - bool has_header(const std::string &key) const; - std::string get_header_value(const std::string &key, const char *def = "", + bool has_header(std::string_view key) const; + std::string get_header_value(std::string_view key, const char *def = "", size_t id = 0) const; - uint64_t get_header_value_u64(const std::string &key, uint64_t def = 0, + uint64_t get_header_value_u64(std::string_view key, uint64_t def = 0, size_t id = 0) const; - size_t get_header_value_count(const std::string &key) const; - void set_header(const std::string &key, const std::string &val); + size_t get_header_value_count(std::string_view key) const; + void set_header(std::string_view key, std::string_view val); - void set_redirect(const std::string &url, int status = StatusCode::Found_302); - void set_content(const char *s, size_t n, const std::string &content_type); - void set_content(const std::string &s, const std::string &content_type); - void set_content(std::string &&s, const std::string &content_type); + void set_redirect(std::string_view url, int status = StatusCode::Found_302); + void set_content(const char *s, size_t n, std::string_view content_type); + void set_content(std::string_view s, std::string_view content_type); + void set_content(std::string &&s, std::string_view content_type); void set_content_provider( - size_t length, const std::string &content_type, ContentProvider provider, + size_t length, std::string_view content_type, ContentProvider provider, ContentProviderResourceReleaser resource_releaser = nullptr); void set_content_provider( - const std::string &content_type, ContentProviderWithoutLength provider, + std::string_view content_type, ContentProviderWithoutLength provider, ContentProviderResourceReleaser resource_releaser = nullptr); void set_chunked_content_provider( - const std::string &content_type, ContentProviderWithoutLength provider, + std::string_view content_type, ContentProviderWithoutLength provider, ContentProviderResourceReleaser resource_releaser = nullptr); - void set_file_content(const std::string &path, - const std::string &content_type); - void set_file_content(const std::string &path); + void set_file_content(std::string_view path, + std::string_view content_type); + void set_file_content(std::string_view path); Response() = default; Response(const Response &) = default; @@ -735,7 +736,7 @@ public: virtual socket_t socket() const = 0; ssize_t write(const char *ptr); - ssize_t write(const std::string &s); + ssize_t write(std::string_view s); }; class TaskQueue { @@ -875,7 +876,7 @@ public: */ class PathParamsMatcher final : public MatcherBase { public: - PathParamsMatcher(const std::string &pattern); + PathParamsMatcher(std::string_view pattern); bool match(Request &request) const override; @@ -904,7 +905,7 @@ private: */ class RegexMatcher final : public MatcherBase { public: - RegexMatcher(const std::string &pattern) : regex_(pattern) {} + RegexMatcher(std::string_view pattern) : regex_(std::string(pattern)) {} bool match(Request &request) const override; @@ -942,25 +943,25 @@ public: virtual bool is_valid() const; - Server &Get(const std::string &pattern, Handler handler); - Server &Post(const std::string &pattern, Handler handler); - Server &Post(const std::string &pattern, HandlerWithContentReader handler); - Server &Put(const std::string &pattern, Handler handler); - Server &Put(const std::string &pattern, HandlerWithContentReader handler); - Server &Patch(const std::string &pattern, Handler handler); - Server &Patch(const std::string &pattern, HandlerWithContentReader handler); - Server &Delete(const std::string &pattern, Handler handler); - Server &Delete(const std::string &pattern, HandlerWithContentReader handler); - Server &Options(const std::string &pattern, Handler handler); + Server &Get(std::string_view pattern, Handler handler); + Server &Post(std::string_view pattern, Handler handler); + Server &Post(std::string_view pattern, HandlerWithContentReader handler); + Server &Put(std::string_view pattern, Handler handler); + Server &Put(std::string_view pattern, HandlerWithContentReader handler); + Server &Patch(std::string_view pattern, Handler handler); + Server &Patch(std::string_view pattern, HandlerWithContentReader handler); + Server &Delete(std::string_view pattern, Handler handler); + Server &Delete(std::string_view pattern, HandlerWithContentReader handler); + Server &Options(std::string_view pattern, Handler handler); - bool set_base_dir(const std::string &dir, - const std::string &mount_point = std::string()); - bool set_mount_point(const std::string &mount_point, const std::string &dir, + bool set_base_dir(std::string_view dir, + std::string_view mount_point = std::string()); + bool set_mount_point(std::string_view mount_point, std::string_view dir, Headers headers = Headers()); - bool remove_mount_point(const std::string &mount_point); - Server &set_file_extension_and_mimetype_mapping(const std::string &ext, - const std::string &mime); - Server &set_default_file_mimetype(const std::string &mime); + bool remove_mount_point(std::string_view mount_point); + Server &set_file_extension_and_mimetype_mapping(std::string_view ext, + std::string_view mime); + Server &set_default_file_mimetype(std::string_view mime); Server &set_file_request_handler(Handler handler); template @@ -1003,11 +1004,11 @@ public: Server &set_payload_max_length(size_t length); - bool bind_to_port(const std::string &host, int port, int socket_flags = 0); - int bind_to_any_port(const std::string &host, int socket_flags = 0); + bool bind_to_port(std::string_view host, int port, int socket_flags = 0); + int bind_to_any_port(std::string_view host, int socket_flags = 0); bool listen_after_bind(); - bool listen(const std::string &host, int port, int socket_flags = 0); + bool listen(std::string_view host, int port, int socket_flags = 0); bool is_running() const; void wait_until_ready() const; @@ -1017,8 +1018,8 @@ public: std::function new_task_queue; protected: - bool process_request(Stream &strm, const std::string &remote_addr, - int remote_port, const std::string &local_addr, + bool process_request(Stream &strm, std::string_view remote_addr, + int remote_port, std::string_view local_addr, int local_port, bool close_connection, bool &connection_closed, const std::function &setup_request); @@ -1042,15 +1043,15 @@ private: HandlerWithContentReader>>; static std::unique_ptr - make_matcher(const std::string &pattern); + make_matcher(std::string_view pattern); Server &set_error_handler_core(HandlerWithResponse handler, std::true_type); Server &set_error_handler_core(Handler handler, std::false_type); - socket_t create_server_socket(const std::string &host, int port, + socket_t create_server_socket(std::string_view host, int port, int socket_flags, SocketOptions socket_options) const; - int bind_internal(const std::string &host, int port, int socket_flags); + int bind_internal(std::string_view host, int port, int socket_flags); bool listen_internal(); bool routing(Request &req, Response &res, Stream &strm); @@ -1073,8 +1074,8 @@ private: const Request &req, Response &res, bool need_apply_ranges); bool write_content_with_provider(Stream &strm, const Request &req, - Response &res, const std::string &boundary, - const std::string &content_type); + Response &res, std::string_view boundary, + std::string_view content_type); bool read_content(Stream &strm, Request &req, Response &res); bool read_content_with_content_receiver(Stream &strm, Request &req, Response &res, @@ -1181,13 +1182,13 @@ public: Error error() const { return err_; } // Request Headers - bool has_request_header(const std::string &key) const; - std::string get_request_header_value(const std::string &key, + bool has_request_header(std::string_view key) const; + std::string get_request_header_value(std::string_view key, const char *def = "", size_t id = 0) const; - uint64_t get_request_header_value_u64(const std::string &key, + uint64_t get_request_header_value_u64(std::string_view key, uint64_t def = 0, size_t id = 0) const; - size_t get_request_header_value_count(const std::string &key) const; + size_t get_request_header_value_count(std::string_view key) const; private: std::unique_ptr res_; @@ -1197,197 +1198,197 @@ private: class ClientImpl { public: - explicit ClientImpl(const std::string &host); + explicit ClientImpl(std::string_view host); - explicit ClientImpl(const std::string &host, int port); + explicit ClientImpl(std::string_view host, int port); - explicit ClientImpl(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path); + explicit ClientImpl(std::string_view host, int port, + std::string_view client_cert_path, + std::string_view client_key_path); virtual ~ClientImpl(); virtual bool is_valid() const; - Result Get(const std::string &path); - Result Get(const std::string &path, const Headers &headers); - Result Get(const std::string &path, Progress progress); - Result Get(const std::string &path, const Headers &headers, + Result Get(std::string_view path); + Result Get(std::string_view path, const Headers &headers); + Result Get(std::string_view path, Progress progress); + Result Get(std::string_view path, const Headers &headers, Progress progress); - Result Get(const std::string &path, ContentReceiver content_receiver); - Result Get(const std::string &path, const Headers &headers, + Result Get(std::string_view path, ContentReceiver content_receiver); + Result Get(std::string_view path, const Headers &headers, ContentReceiver content_receiver); - Result Get(const std::string &path, ContentReceiver content_receiver, + Result Get(std::string_view path, ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, const Headers &headers, + Result Get(std::string_view path, const Headers &headers, ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, ResponseHandler response_handler, + Result Get(std::string_view path, ResponseHandler response_handler, ContentReceiver content_receiver); - Result Get(const std::string &path, const Headers &headers, + Result Get(std::string_view path, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver); - Result Get(const std::string &path, ResponseHandler response_handler, + Result Get(std::string_view path, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, const Headers &headers, + Result Get(std::string_view path, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, const Params ¶ms, + Result Get(std::string_view path, const Params ¶ms, const Headers &headers, Progress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, + Result Get(std::string_view path, const Params ¶ms, const Headers &headers, ContentReceiver content_receiver, Progress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, + Result Get(std::string_view path, const Params ¶ms, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress = nullptr); - Result Head(const std::string &path); - Result Head(const std::string &path, const Headers &headers); + Result Head(std::string_view path); + Result Head(std::string_view path, const Headers &headers); - Result Post(const std::string &path); - Result Post(const std::string &path, const Headers &headers); - Result Post(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, + Result Post(std::string_view path); + Result Post(std::string_view path, const Headers &headers); + Result Post(std::string_view path, const char *body, size_t content_length, + std::string_view content_type); + Result Post(std::string_view path, const Headers &headers, const char *body, + size_t content_length, std::string_view content_type); + Result Post(std::string_view path, const Headers &headers, const char *body, + size_t content_length, std::string_view content_type, Progress progress); - Result Post(const std::string &path, const std::string &body, - const std::string &content_type); - Result Post(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Post(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, + Result Post(std::string_view path, std::string_view body, + std::string_view content_type); + Result Post(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress); + Result Post(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type); + Result Post(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type, Progress progress); - Result Post(const std::string &path, size_t content_length, + Result Post(std::string_view path, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Post(const std::string &path, + std::string_view content_type); + Result Post(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Post(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Post(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Post(const std::string &path, const Params ¶ms); - Result Post(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Post(std::string_view path, const Params ¶ms); + Result Post(std::string_view path, const Headers &headers, const Params ¶ms); - Result Post(const std::string &path, const Headers &headers, + Result Post(std::string_view path, const Headers &headers, const Params ¶ms, Progress progress); - Result Post(const std::string &path, const MultipartFormDataItems &items); - Result Post(const std::string &path, const Headers &headers, + Result Post(std::string_view path, const MultipartFormDataItems &items); + Result Post(std::string_view path, const Headers &headers, const MultipartFormDataItems &items); - Result Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary); - Result Post(const std::string &path, const Headers &headers, + Result Post(std::string_view path, const Headers &headers, + const MultipartFormDataItems &items, std::string_view boundary); + Result Post(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, const MultipartFormDataProviderItems &provider_items); - Result Put(const std::string &path); - Result Put(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, + Result Put(std::string_view path); + Result Put(std::string_view path, const char *body, size_t content_length, + std::string_view content_type); + Result Put(std::string_view path, const Headers &headers, const char *body, + size_t content_length, std::string_view content_type); + Result Put(std::string_view path, const Headers &headers, const char *body, + size_t content_length, std::string_view content_type, Progress progress); - Result Put(const std::string &path, const std::string &body, - const std::string &content_type); - Result Put(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Put(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, + Result Put(std::string_view path, std::string_view body, + std::string_view content_type); + Result Put(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress); + Result Put(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type); + Result Put(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type, Progress progress); - Result Put(const std::string &path, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Put(const std::string &path, + Result Put(std::string_view path, size_t content_length, + ContentProvider content_provider, std::string_view content_type); + Result Put(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Put(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Put(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Put(const std::string &path, const Params ¶ms); - Result Put(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Put(std::string_view path, const Params ¶ms); + Result Put(std::string_view path, const Headers &headers, const Params ¶ms); - Result Put(const std::string &path, const Headers &headers, + Result Put(std::string_view path, const Headers &headers, const Params ¶ms, Progress progress); - Result Put(const std::string &path, const MultipartFormDataItems &items); - Result Put(const std::string &path, const Headers &headers, + Result Put(std::string_view path, const MultipartFormDataItems &items); + Result Put(std::string_view path, const Headers &headers, const MultipartFormDataItems &items); - Result Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary); - Result Put(const std::string &path, const Headers &headers, + Result Put(std::string_view path, const Headers &headers, + const MultipartFormDataItems &items, std::string_view boundary); + Result Put(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, const MultipartFormDataProviderItems &provider_items); - Result Patch(const std::string &path); - Result Patch(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Patch(const std::string &path, const char *body, size_t content_length, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const Headers &headers, + Result Patch(std::string_view path); + Result Patch(std::string_view path, const char *body, size_t content_length, + std::string_view content_type); + Result Patch(std::string_view path, const char *body, size_t content_length, + std::string_view content_type, Progress progress); + Result Patch(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Patch(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const std::string &body, - const std::string &content_type); - Result Patch(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, + std::string_view content_type, Progress progress); + Result Patch(std::string_view path, std::string_view body, + std::string_view content_type); + Result Patch(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress); + Result Patch(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type); + Result Patch(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type, Progress progress); - Result Patch(const std::string &path, size_t content_length, + Result Patch(std::string_view path, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Patch(const std::string &path, + std::string_view content_type); + Result Patch(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Patch(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Patch(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type); + std::string_view content_type); - Result Delete(const std::string &path); - Result Delete(const std::string &path, const Headers &headers); - Result Delete(const std::string &path, const char *body, - size_t content_length, const std::string &content_type); - Result Delete(const std::string &path, const char *body, - size_t content_length, const std::string &content_type, + Result Delete(std::string_view path); + Result Delete(std::string_view path, const Headers &headers); + Result Delete(std::string_view path, const char *body, + size_t content_length, std::string_view content_type); + Result Delete(std::string_view path, const char *body, + size_t content_length, std::string_view content_type, Progress progress); - Result Delete(const std::string &path, const Headers &headers, + Result Delete(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type); - Result Delete(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Delete(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, Progress progress); - Result Delete(const std::string &path, const std::string &body, - const std::string &content_type); - Result Delete(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Delete(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type); - Result Delete(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, + std::string_view content_type, Progress progress); + Result Delete(std::string_view path, std::string_view body, + std::string_view content_type); + Result Delete(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress); + Result Delete(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type); + Result Delete(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type, Progress progress); - Result Options(const std::string &path); - Result Options(const std::string &path, const Headers &headers); + Result Options(std::string_view path); + Result Options(std::string_view path, const Headers &headers); bool send(Request &req, Response &res, Error &error); Result send(const Request &req); @@ -1425,11 +1426,11 @@ public: template void set_write_timeout(const std::chrono::duration &duration); - void set_basic_auth(const std::string &username, const std::string &password); - void set_bearer_token_auth(const std::string &token); + void set_basic_auth(std::string_view username, std::string_view password); + void set_bearer_token_auth(std::string_view token); #ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_digest_auth(const std::string &username, - const std::string &password); + void set_digest_auth(std::string_view username, + std::string_view password); #endif void set_keep_alive(bool on); @@ -1441,20 +1442,20 @@ public: void set_decompress(bool on); - void set_interface(const std::string &intf); + void set_interface(std::string_view intf); - void set_proxy(const std::string &host, int port); - void set_proxy_basic_auth(const std::string &username, - const std::string &password); - void set_proxy_bearer_token_auth(const std::string &token); + void set_proxy(std::string_view host, int port); + void set_proxy_basic_auth(std::string_view username, + std::string_view password); + void set_proxy_bearer_token_auth(std::string_view token); #ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_proxy_digest_auth(const std::string &username, - const std::string &password); + void set_proxy_digest_auth(std::string_view username, + std::string_view password); #endif #ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_ca_cert_path(const std::string &ca_cert_file_path, - const std::string &ca_cert_dir_path = std::string()); + void set_ca_cert_path(std::string_view ca_cert_file_path, + std::string_view ca_cert_dir_path = std::string()); void set_ca_cert_store(X509_STORE *ca_cert_store); X509_STORE *create_ca_cert_store(const char *ca_cert, std::size_t size) const; #endif @@ -1602,18 +1603,18 @@ private: Request &req, const char *body, size_t content_length, ContentProvider content_provider, ContentProviderWithoutLength content_provider_without_length, - const std::string &content_type, Error &error); + std::string_view content_type, Error &error); Result send_with_content_provider( - const std::string &method, const std::string &path, + std::string_view method, std::string_view path, const Headers &headers, const char *body, size_t content_length, ContentProvider content_provider, ContentProviderWithoutLength content_provider_without_length, - const std::string &content_type, Progress progress); + std::string_view content_type, Progress progress); ContentProviderWithoutLength get_multipart_content_provider( - const std::string &boundary, const MultipartFormDataItems &items, + std::string_view boundary, const MultipartFormDataItems &items, const MultipartFormDataProviderItems &provider_items) const; - std::string adjust_host_string(const std::string &host) const; + std::string adjust_host_string(std::string_view host) const; virtual bool process_socket(const Socket &socket, std::function callback); @@ -1623,18 +1624,18 @@ private: class Client { public: // Universal interface - explicit Client(const std::string &scheme_host_port); + explicit Client(std::string_view scheme_host_port); - explicit Client(const std::string &scheme_host_port, - const std::string &client_cert_path, - const std::string &client_key_path); + explicit Client(std::string_view scheme_host_port, + std::string_view client_cert_path, + std::string_view client_key_path); // HTTP only interface - explicit Client(const std::string &host, int port); + explicit Client(std::string_view host, int port); - explicit Client(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path); + explicit Client(std::string_view host, int port, + std::string_view client_cert_path, + std::string_view client_key_path); Client(Client &&) = default; Client &operator=(Client &&) = default; @@ -1643,185 +1644,185 @@ public: bool is_valid() const; - Result Get(const std::string &path); - Result Get(const std::string &path, const Headers &headers); - Result Get(const std::string &path, Progress progress); - Result Get(const std::string &path, const Headers &headers, + Result Get(std::string_view path); + Result Get(std::string_view path, const Headers &headers); + Result Get(std::string_view path, Progress progress); + Result Get(std::string_view path, const Headers &headers, Progress progress); - Result Get(const std::string &path, ContentReceiver content_receiver); - Result Get(const std::string &path, const Headers &headers, + Result Get(std::string_view path, ContentReceiver content_receiver); + Result Get(std::string_view path, const Headers &headers, ContentReceiver content_receiver); - Result Get(const std::string &path, ContentReceiver content_receiver, + Result Get(std::string_view path, ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, const Headers &headers, + Result Get(std::string_view path, const Headers &headers, ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, ResponseHandler response_handler, + Result Get(std::string_view path, ResponseHandler response_handler, ContentReceiver content_receiver); - Result Get(const std::string &path, const Headers &headers, + Result Get(std::string_view path, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver); - Result Get(const std::string &path, const Headers &headers, + Result Get(std::string_view path, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, ResponseHandler response_handler, + Result Get(std::string_view path, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, const Params ¶ms, + Result Get(std::string_view path, const Params ¶ms, const Headers &headers, Progress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, + Result Get(std::string_view path, const Params ¶ms, const Headers &headers, ContentReceiver content_receiver, Progress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, + Result Get(std::string_view path, const Params ¶ms, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress = nullptr); - Result Head(const std::string &path); - Result Head(const std::string &path, const Headers &headers); + Result Head(std::string_view path); + Result Head(std::string_view path, const Headers &headers); - Result Post(const std::string &path); - Result Post(const std::string &path, const Headers &headers); - Result Post(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, + Result Post(std::string_view path); + Result Post(std::string_view path, const Headers &headers); + Result Post(std::string_view path, const char *body, size_t content_length, + std::string_view content_type); + Result Post(std::string_view path, const Headers &headers, const char *body, + size_t content_length, std::string_view content_type); + Result Post(std::string_view path, const Headers &headers, const char *body, + size_t content_length, std::string_view content_type, Progress progress); - Result Post(const std::string &path, const std::string &body, - const std::string &content_type); - Result Post(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Post(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, + Result Post(std::string_view path, std::string_view body, + std::string_view content_type); + Result Post(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress); + Result Post(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type); + Result Post(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type, Progress progress); - Result Post(const std::string &path, size_t content_length, + Result Post(std::string_view path, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Post(const std::string &path, + std::string_view content_type); + Result Post(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Post(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Post(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Post(const std::string &path, const Params ¶ms); - Result Post(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Post(std::string_view path, const Params ¶ms); + Result Post(std::string_view path, const Headers &headers, const Params ¶ms); - Result Post(const std::string &path, const Headers &headers, + Result Post(std::string_view path, const Headers &headers, const Params ¶ms, Progress progress); - Result Post(const std::string &path, const MultipartFormDataItems &items); - Result Post(const std::string &path, const Headers &headers, + Result Post(std::string_view path, const MultipartFormDataItems &items); + Result Post(std::string_view path, const Headers &headers, const MultipartFormDataItems &items); - Result Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary); - Result Post(const std::string &path, const Headers &headers, + Result Post(std::string_view path, const Headers &headers, + const MultipartFormDataItems &items, std::string_view boundary); + Result Post(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, const MultipartFormDataProviderItems &provider_items); - Result Put(const std::string &path); - Result Put(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, + Result Put(std::string_view path); + Result Put(std::string_view path, const char *body, size_t content_length, + std::string_view content_type); + Result Put(std::string_view path, const Headers &headers, const char *body, + size_t content_length, std::string_view content_type); + Result Put(std::string_view path, const Headers &headers, const char *body, + size_t content_length, std::string_view content_type, Progress progress); - Result Put(const std::string &path, const std::string &body, - const std::string &content_type); - Result Put(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Put(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, + Result Put(std::string_view path, std::string_view body, + std::string_view content_type); + Result Put(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress); + Result Put(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type); + Result Put(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type, Progress progress); - Result Put(const std::string &path, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Put(const std::string &path, + Result Put(std::string_view path, size_t content_length, + ContentProvider content_provider, std::string_view content_type); + Result Put(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Put(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Put(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Put(const std::string &path, const Params ¶ms); - Result Put(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Put(std::string_view path, const Params ¶ms); + Result Put(std::string_view path, const Headers &headers, const Params ¶ms); - Result Put(const std::string &path, const Headers &headers, + Result Put(std::string_view path, const Headers &headers, const Params ¶ms, Progress progress); - Result Put(const std::string &path, const MultipartFormDataItems &items); - Result Put(const std::string &path, const Headers &headers, + Result Put(std::string_view path, const MultipartFormDataItems &items); + Result Put(std::string_view path, const Headers &headers, const MultipartFormDataItems &items); - Result Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary); - Result Put(const std::string &path, const Headers &headers, + Result Put(std::string_view path, const Headers &headers, + const MultipartFormDataItems &items, std::string_view boundary); + Result Put(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, const MultipartFormDataProviderItems &provider_items); - Result Patch(const std::string &path); - Result Patch(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Patch(const std::string &path, const char *body, size_t content_length, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const Headers &headers, + Result Patch(std::string_view path); + Result Patch(std::string_view path, const char *body, size_t content_length, + std::string_view content_type); + Result Patch(std::string_view path, const char *body, size_t content_length, + std::string_view content_type, Progress progress); + Result Patch(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Patch(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const std::string &body, - const std::string &content_type); - Result Patch(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, + std::string_view content_type, Progress progress); + Result Patch(std::string_view path, std::string_view body, + std::string_view content_type); + Result Patch(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress); + Result Patch(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type); + Result Patch(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type, Progress progress); - Result Patch(const std::string &path, size_t content_length, + Result Patch(std::string_view path, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Patch(const std::string &path, + std::string_view content_type); + Result Patch(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Patch(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Patch(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type); + std::string_view content_type); - Result Delete(const std::string &path); - Result Delete(const std::string &path, const Headers &headers); - Result Delete(const std::string &path, const char *body, - size_t content_length, const std::string &content_type); - Result Delete(const std::string &path, const char *body, - size_t content_length, const std::string &content_type, + Result Delete(std::string_view path); + Result Delete(std::string_view path, const Headers &headers); + Result Delete(std::string_view path, const char *body, + size_t content_length, std::string_view content_type); + Result Delete(std::string_view path, const char *body, + size_t content_length, std::string_view content_type, Progress progress); - Result Delete(const std::string &path, const Headers &headers, + Result Delete(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type); - Result Delete(const std::string &path, const Headers &headers, + std::string_view content_type); + Result Delete(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, Progress progress); - Result Delete(const std::string &path, const std::string &body, - const std::string &content_type); - Result Delete(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Delete(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type); - Result Delete(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, + std::string_view content_type, Progress progress); + Result Delete(std::string_view path, std::string_view body, + std::string_view content_type); + Result Delete(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress); + Result Delete(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type); + Result Delete(std::string_view path, const Headers &headers, + std::string_view body, std::string_view content_type, Progress progress); - Result Options(const std::string &path); - Result Options(const std::string &path, const Headers &headers); + Result Options(std::string_view path); + Result Options(std::string_view path, const Headers &headers); bool send(Request &req, Response &res, Error &error); Result send(const Request &req); @@ -1858,11 +1859,11 @@ public: template void set_write_timeout(const std::chrono::duration &duration); - void set_basic_auth(const std::string &username, const std::string &password); - void set_bearer_token_auth(const std::string &token); + void set_basic_auth(std::string_view username, std::string_view password); + void set_bearer_token_auth(std::string_view token); #ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_digest_auth(const std::string &username, - const std::string &password); + void set_digest_auth(std::string_view username, + std::string_view password); #endif void set_keep_alive(bool on); @@ -1874,15 +1875,15 @@ public: void set_decompress(bool on); - void set_interface(const std::string &intf); + void set_interface(std::string_view intf); - void set_proxy(const std::string &host, int port); - void set_proxy_basic_auth(const std::string &username, - const std::string &password); - void set_proxy_bearer_token_auth(const std::string &token); + void set_proxy(std::string_view host, int port); + void set_proxy_basic_auth(std::string_view username, + std::string_view password); + void set_proxy_bearer_token_auth(std::string_view token); #ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_proxy_digest_auth(const std::string &username, - const std::string &password); + void set_proxy_digest_auth(std::string_view username, + std::string_view password); #endif #ifdef CPPHTTPLIB_OPENSSL_SUPPORT @@ -1895,8 +1896,8 @@ public: // SSL #ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_ca_cert_path(const std::string &ca_cert_file_path, - const std::string &ca_cert_dir_path = std::string()); + void set_ca_cert_path(std::string_view ca_cert_file_path, + std::string_view ca_cert_dir_path = std::string()); void set_ca_cert_store(X509_STORE *ca_cert_store); void load_ca_cert_store(const char *ca_cert, std::size_t size); @@ -1946,18 +1947,18 @@ private: class SSLClient final : public ClientImpl { public: - explicit SSLClient(const std::string &host); + explicit SSLClient(std::string_view host); - explicit SSLClient(const std::string &host, int port); + explicit SSLClient(std::string_view host, int port); - explicit SSLClient(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path, - const std::string &private_key_password = std::string()); + explicit SSLClient(std::string_view host, int port, + std::string_view client_cert_path, + std::string_view client_key_path, + std::string_view private_key_password = std::string()); - explicit SSLClient(const std::string &host, int port, X509 *client_cert, + explicit SSLClient(std::string_view host, int port, X509 *client_cert, EVP_PKEY *client_key, - const std::string &private_key_password = std::string()); + std::string_view private_key_password = std::string()); ~SSLClient() override; @@ -2017,9 +2018,9 @@ inline void duration_to_sec_and_usec(const T &duration, U callback) { } inline uint64_t get_header_value_u64(const Headers &headers, - const std::string &key, uint64_t def, + std::string_view key, uint64_t def, size_t id) { - auto rng = headers.equal_range(key); + auto rng = headers.equal_range(std::string(key)); auto it = rng.first; std::advance(it, static_cast(id)); if (it != rng.second) { @@ -2029,12 +2030,12 @@ inline uint64_t get_header_value_u64(const Headers &headers, } } // namespace detail -inline uint64_t Request::get_header_value_u64(const std::string &key, +inline uint64_t Request::get_header_value_u64(std::string_view key, uint64_t def, size_t id) const { return detail::get_header_value_u64(headers, key, def, id); } -inline uint64_t Response::get_header_value_u64(const std::string &key, +inline uint64_t Response::get_header_value_u64(std::string_view key, uint64_t def, size_t id) const { return detail::get_header_value_u64(headers, key, def, id); } @@ -2270,7 +2271,7 @@ inline std::ostream &operator<<(std::ostream &os, const Error &obj) { return os; } -inline uint64_t Result::get_request_header_value_u64(const std::string &key, +inline uint64_t Result::get_request_header_value_u64(std::string_view key, uint64_t def, size_t id) const { return detail::get_header_value_u64(request_headers_, key, def, id); @@ -2321,17 +2322,17 @@ Client::set_write_timeout(const std::chrono::duration &duration) { * .h + .cc. */ -std::string hosted_at(const std::string &hostname); +std::string hosted_at(std::string_view hostname); -void hosted_at(const std::string &hostname, std::vector &addrs); +void hosted_at(std::string_view hostname, std::vector &addrs); -std::string append_query_params(const std::string &path, const Params ¶ms); +std::string append_query_params(std::string_view path, const Params ¶ms); std::pair make_range_header(const Ranges &ranges); std::pair -make_basic_authentication_header(const std::string &username, - const std::string &password, +make_basic_authentication_header(std::string_view username, + std::string_view password, bool is_proxy = false); namespace detail { @@ -2354,7 +2355,7 @@ inline std::wstring u8string_to_wstring(const char *s) { #endif struct FileStat { - FileStat(const std::string &path); + FileStat(std::string_view path); bool is_file() const; bool is_dir() const; @@ -2367,13 +2368,13 @@ private: int ret_ = -1; }; -std::string encode_query_param(const std::string &value); +std::string encode_query_param(std::string_view value); -std::string decode_url(const std::string &s, bool convert_plus_to_space); +std::string decode_url(std::string_view s, bool convert_plus_to_space); -void read_file(const std::string &path, std::string &out); +void read_file(std::string_view path, std::string &out); -std::string trim_copy(const std::string &s); +std::string trim_copy(std::string_view s); void divide( const char *data, std::size_t size, char d, @@ -2381,7 +2382,7 @@ void divide( fn); void divide( - const std::string &str, char d, + std::string_view str, char d, std::function fn); @@ -2396,7 +2397,7 @@ bool process_client_socket(socket_t sock, time_t read_timeout_sec, time_t write_timeout_usec, std::function callback); -socket_t create_client_socket(const std::string &host, const std::string &ip, +socket_t create_client_socket(std::string_view host, std::string_view ip, int port, int address_family, bool tcp_nodelay, bool ipv6_v6only, SocketOptions socket_options, time_t connection_timeout_sec, @@ -2404,21 +2405,21 @@ socket_t create_client_socket(const std::string &host, const std::string &ip, time_t read_timeout_sec, time_t read_timeout_usec, time_t write_timeout_sec, time_t write_timeout_usec, - const std::string &intf, Error &error); + std::string_view intf, Error &error); -const char *get_header_value(const Headers &headers, const std::string &key, +const char *get_header_value(const Headers &headers, std::string_view key, const char *def, size_t id); std::string params_to_query_str(const Params ¶ms); void parse_query_text(const char *data, std::size_t size, Params ¶ms); -void parse_query_text(const std::string &s, Params ¶ms); +void parse_query_text(std::string_view s, Params ¶ms); -bool parse_multipart_boundary(const std::string &content_type, +bool parse_multipart_boundary(std::string_view content_type, std::string &boundary); -bool parse_range_header(const std::string &s, Ranges &ranges); +bool parse_range_header(std::string_view s, Ranges &ranges); int close_socket(socket_t sock); @@ -2604,7 +2605,7 @@ inline bool is_hex(char c, int &v) { return false; } -inline bool from_hex_to_i(const std::string &s, size_t i, size_t cnt, +inline bool from_hex_to_i(std::string_view s, size_t i, size_t cnt, int &val) { if (i >= s.size()) { return false; @@ -2670,7 +2671,7 @@ inline size_t to_utf8(int code, char *buff) { // NOTE: This code came up with the following stackoverflow post: // https://stackoverflow.com/questions/180947/base64-decode-snippet-in-c -inline std::string base64_encode(const std::string &in) { +inline std::string base64_encode(std::string_view in) { static const auto lookup = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; @@ -2700,7 +2701,7 @@ inline std::string base64_encode(const std::string &in) { return out; } -inline bool is_valid_path(const std::string &path) { +inline bool is_valid_path(std::string_view path) { size_t level = 0; size_t i = 0; @@ -2744,12 +2745,13 @@ inline bool is_valid_path(const std::string &path) { return true; } -inline FileStat::FileStat(const std::string &path) { +inline FileStat::FileStat(std::string_view path) { + auto path_str = std::string(path); #if defined(_WIN32) - auto wpath = u8string_to_wstring(path.c_str()); + auto wpath = u8string_to_wstring(path_str.c_str()); ret_ = _wstat(wpath.c_str(), &st_); #else - ret_ = stat(path.c_str(), &st_); + ret_ = stat(path_str.c_str(), &st_); #endif } @@ -2761,7 +2763,7 @@ inline bool FileStat::is_dir() const { return ret_ >= 0 && S_ISDIR(st_.st_mode); } -inline std::string encode_query_param(const std::string &value) { +inline std::string encode_query_param(std::string_view value) { std::ostringstream escaped; escaped.fill('0'); escaped << std::hex; @@ -2782,7 +2784,7 @@ inline std::string encode_query_param(const std::string &value) { return escaped.str(); } -inline std::string encode_url(const std::string &s) { +inline std::string encode_url(std::string_view s) { std::string result; result.reserve(s.size()); @@ -2828,7 +2830,7 @@ inline std::string encode_url(const std::string &s) { return result; } -inline std::string decode_url(const std::string &s, +inline std::string decode_url(std::string_view s, bool convert_plus_to_space) { std::string result; @@ -2867,7 +2869,7 @@ inline std::string decode_url(const std::string &s, return result; } -inline void read_file(const std::string &path, std::string &out) { +inline void read_file(std::string_view path, std::string &out) { std::ifstream fs(path, std::ios_base::binary); fs.seekg(0, std::ios_base::end); auto size = fs.tellg(); @@ -2876,10 +2878,11 @@ inline void read_file(const std::string &path, std::string &out) { fs.read(&out[0], static_cast(size)); } -inline std::string file_extension(const std::string &path) { +inline std::string file_extension(std::string_view path) { std::smatch m; static auto re = std::regex("\\.([a-zA-Z0-9]+)$"); - if (std::regex_search(path, m, re)) { + auto path_str = std::string(path); + if (std::regex_search(path_str, m, re)) { return m[1].str(); } return std::string(); @@ -2898,16 +2901,16 @@ inline std::pair trim(const char *b, const char *e, size_t left, return std::make_pair(left, right); } -inline std::string trim_copy(const std::string &s) { +inline std::string trim_copy(std::string_view s) { auto r = trim(s.data(), s.data() + s.size(), 0, s.size()); - return s.substr(r.first, r.second - r.first); + return std::string(s.substr(r.first, r.second - r.first)); } -inline std::string trim_double_quotes_copy(const std::string &s) { +inline std::string trim_double_quotes_copy(std::string_view s) { if (s.length() >= 2 && s.front() == '"' && s.back() == '"') { - return s.substr(1, s.size() - 2); + return std::string(s.substr(1, s.size() - 2)); } - return s; + return std::string(s); } inline void @@ -2925,7 +2928,7 @@ divide(const char *data, std::size_t size, char d, } inline void -divide(const std::string &str, char d, +divide(std::string_view str, char d, std::function fn) { divide(str.data(), str.size(), d, std::move(fn)); @@ -3499,27 +3502,27 @@ inline int shutdown_socket(socket_t sock) { #endif } -inline std::string escape_abstract_namespace_unix_domain(const std::string &s) { +inline std::string escape_abstract_namespace_unix_domain(std::string_view s) { if (s.size() > 1 && s[0] == '\0') { - auto ret = s; + auto ret = std::string(s); ret[0] = '@'; return ret; } - return s; + return std::string(s); } inline std::string -unescape_abstract_namespace_unix_domain(const std::string &s) { +unescape_abstract_namespace_unix_domain(std::string_view s) { if (s.size() > 1 && s[0] == '@') { - auto ret = s; + auto ret = std::string(s); ret[0] = '\0'; return ret; } - return s; + return std::string(s); } template -socket_t create_socket(const std::string &host, const std::string &ip, int port, +socket_t create_socket(std::string_view host, std::string_view ip, int port, int address_family, int socket_flags, bool tcp_nodelay, bool ipv6_v6only, SocketOptions socket_options, BindOrConnect bind_or_connect) { @@ -3532,14 +3535,16 @@ socket_t create_socket(const std::string &host, const std::string &ip, int port, hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_IP; + auto host_str = std::string(host); + auto ip_str = std::string(ip); if (!ip.empty()) { - node = ip.c_str(); + node = ip_str.c_str(); // Ask getaddrinfo to convert IP in c-string to address hints.ai_family = AF_UNSPEC; hints.ai_flags = AI_NUMERICHOST; } else { if (!host.empty()) { - node = host.c_str(); + node = host_str.c_str(); } hints.ai_family = address_family; hints.ai_flags = socket_flags; @@ -3703,7 +3708,7 @@ inline bool is_connection_error() { #endif } -inline bool bind_ip_address(socket_t sock, const std::string &host) { +inline bool bind_ip_address(socket_t sock, std::string_view host) { struct addrinfo hints; struct addrinfo *result; @@ -3712,7 +3717,8 @@ inline bool bind_ip_address(socket_t sock, const std::string &host) { hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = 0; - if (getaddrinfo(host.c_str(), "0", &hints, &result)) { + auto host_str = std::string(host); + if (getaddrinfo(host_str.c_str(), "0", &hints, &result)) { return false; } auto se = detail::scope_exit([&] { freeaddrinfo(result); }); @@ -3734,7 +3740,7 @@ inline bool bind_ip_address(socket_t sock, const std::string &host) { #endif #ifdef USE_IF2IP -inline std::string if2ip(int address_family, const std::string &ifn) { +inline std::string if2ip(int address_family, std::string_view ifn) { struct ifaddrs *ifap; getifaddrs(&ifap); auto se = detail::scope_exit([&] { freeifaddrs(ifap); }); @@ -3772,12 +3778,12 @@ inline std::string if2ip(int address_family, const std::string &ifn) { #endif inline socket_t create_client_socket( - const std::string &host, const std::string &ip, int port, + std::string_view host, std::string_view ip, int port, int address_family, bool tcp_nodelay, bool ipv6_v6only, SocketOptions socket_options, time_t connection_timeout_sec, time_t connection_timeout_usec, time_t read_timeout_sec, time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, const std::string &intf, Error &error) { + time_t write_timeout_usec, std::string_view intf, Error &error) { auto sock = create_socket( host, ip, port, address_family, 0, tcp_nodelay, ipv6_v6only, std::move(socket_options), @@ -3932,7 +3938,7 @@ inline constexpr unsigned int str2tag_core(const char *s, size_t l, static_cast(*s)); } -inline unsigned int str2tag(const std::string &s) { +inline unsigned int str2tag(std::string_view s) { return str2tag_core(s.data(), s.size(), 0); } @@ -3943,9 +3949,9 @@ inline constexpr unsigned int operator""_t(const char *s, size_t l) { } // namespace udl inline std::string -find_content_type(const std::string &path, +find_content_type(std::string_view path, const std::map &user_data, - const std::string &default_content_type) { + std::string_view default_content_type) { auto ext = file_extension(path); auto it = user_data.find(ext); @@ -3957,7 +3963,7 @@ find_content_type(const std::string &path, switch (str2tag(ext)) { default: - return default_content_type; + return std::string(default_content_type); case "css"_t: return "text/css"; @@ -4051,7 +4057,7 @@ find_content_type(const std::string &path, } } -inline bool can_compress_content_type(const std::string &content_type) { +inline bool can_compress_content_type(std::string_view content_type) { using udl::operator""_t; auto tag = str2tag(content_type); @@ -4325,14 +4331,14 @@ inline bool brotli_decompressor::decompress(const char *data, } #endif -inline bool has_header(const Headers &headers, const std::string &key) { - return headers.find(key) != headers.end(); +inline bool has_header(const Headers &headers, std::string_view key) { + return headers.find(std::string(key)) != headers.end(); } inline const char *get_header_value(const Headers &headers, - const std::string &key, const char *def, + std::string_view key, const char *def, size_t id) { - auto rng = headers.equal_range(key); + auto rng = headers.equal_range(std::string(key)); auto it = rng.first; std::advance(it, static_cast(id)); if (it != rng.second) { @@ -4435,7 +4441,7 @@ inline bool read_headers(Stream &strm, Headers &headers) { auto end = line_reader.ptr() + line_reader.size() - line_terminator_len; if (!parse_header(line_reader.ptr(), end, - [&](const std::string &key, std::string &val) { + [&](std::string_view key, std::string &val) { headers.emplace(key, val); })) { return false; @@ -4579,7 +4585,7 @@ inline bool read_content_chunked(Stream &strm, T &x, auto end = line_reader.ptr() + line_reader.size() - line_terminator_len; parse_header(line_reader.ptr(), end, - [&](const std::string &key, const std::string &val) { + [&](std::string_view key, std::string_view val) { x.headers.emplace(key, val); }); @@ -4677,9 +4683,9 @@ bool read_content(Stream &strm, T &x, size_t payload_max_length, int &status, }); } -inline ssize_t write_request_line(Stream &strm, const std::string &method, - const std::string &path) { - std::string s = method; +inline ssize_t write_request_line(Stream &strm, std::string_view method, + std::string_view path) { + std::string s(method); s += " "; s += path; s += " HTTP/1.1\r\n"; @@ -4933,7 +4939,7 @@ inline bool write_content_chunked(Stream &strm, template inline bool redirect(T &cli, Request &req, Response &res, - const std::string &path, const std::string &location, + std::string_view path, std::string_view location, Error &error) { Request new_req = req; new_req.path = path; @@ -4999,11 +5005,11 @@ inline void parse_query_text(const char *data, std::size_t size, }); } -inline void parse_query_text(const std::string &s, Params ¶ms) { +inline void parse_query_text(std::string_view s, Params ¶ms) { parse_query_text(s.data(), s.size(), params); } -inline bool parse_multipart_boundary(const std::string &content_type, +inline bool parse_multipart_boundary(std::string_view content_type, std::string &boundary) { auto boundary_keyword = "boundary="; auto pos = content_type.find(boundary_keyword); @@ -5016,7 +5022,7 @@ inline bool parse_multipart_boundary(const std::string &content_type, return !boundary.empty(); } -inline void parse_disposition_params(const std::string &s, Params ¶ms) { +inline void parse_disposition_params(std::string_view s, Params ¶ms) { std::set cache; split(s.data(), s.data() + s.size(), ';', [&](const char *b, const char *e) { std::string kv(b, e); @@ -5043,11 +5049,11 @@ inline void parse_disposition_params(const std::string &s, Params ¶ms) { } #ifdef CPPHTTPLIB_NO_EXCEPTIONS -inline bool parse_range_header(const std::string &s, Ranges &ranges) { +inline bool parse_range_header(std::string_view s, Ranges &ranges) { #else -inline bool parse_range_header(const std::string &s, Ranges &ranges) try { +inline bool parse_range_header(std::string_view s, Ranges &ranges) try { #endif - auto is_valid = [](const std::string &str) { + auto is_valid = [](std::string_view str) { return std::all_of(str.cbegin(), str.cend(), [](unsigned char c) { return std::isdigit(c); }); }; @@ -5155,7 +5161,7 @@ public: const auto header = buf_head(pos); if (!parse_header(header.data(), header.data() + header.size(), - [&](const std::string &, const std::string &) {})) { + [&](std::string_view, std::string_view) {})) { is_valid_ = false; return false; } @@ -5173,7 +5179,7 @@ public: std::smatch m; if (std::regex_match(header, m, re_content_disposition)) { Params params; - parse_disposition_params(m[1], params); + parse_disposition_params(m[1].str(), params); auto it = params.find("name"); if (it != params.end()) { @@ -5196,7 +5202,7 @@ public: std::smatch m2; if (std::regex_match(it->second, m2, re_rfc5987_encoding)) { - file_.filename = decode_url(m2[1], false); // override... + file_.filename = decode_url(m2[1].str(), false); // override... } else { is_valid_ = false; return false; @@ -5273,8 +5279,8 @@ private: file_.content_type.clear(); } - bool start_with_case_ignore(const std::string &a, - const std::string &b) const { + bool start_with_case_ignore(std::string_view a, + std::string_view b) const { if (a.size() < b.size()) { return false; } @@ -5297,8 +5303,8 @@ private: MultipartFormData file_; // Buffer - bool start_with(const std::string &a, size_t spos, size_t epos, - const std::string &b) const { + bool start_with(std::string_view a, size_t spos, size_t epos, + std::string_view b) const { if (epos - spos < b.size()) { return false; } @@ -5316,11 +5322,11 @@ private: std::string buf_head(size_t l) const { return buf_.substr(buf_spos_, l); } - bool buf_start_with(const std::string &s) const { + bool buf_start_with(std::string_view s) const { return start_with(buf_, buf_spos_, buf_epos_, s); } - size_t buf_find(const std::string &s) const { + size_t buf_find(std::string_view s) const { auto c = s.front(); size_t off = buf_spos_; @@ -5404,7 +5410,7 @@ inline std::string make_multipart_data_boundary() { return "--cpp-httplib-multipart-data-" + detail::random_string(16); } -inline bool is_multipart_boundary_chars_valid(const std::string &boundary) { +inline bool is_multipart_boundary_chars_valid(std::string_view boundary) { auto valid = true; for (size_t i = 0; i < boundary.size(); i++) { auto c = boundary[i]; @@ -5419,8 +5425,8 @@ inline bool is_multipart_boundary_chars_valid(const std::string &boundary) { template inline std::string serialize_multipart_formdata_item_begin(const T &item, - const std::string &boundary) { - std::string body = "--" + boundary + "\r\n"; + std::string_view boundary) { + std::string body = "--" + std::string(boundary) + "\r\n"; body += "Content-Disposition: form-data; name=\"" + item.name + "\""; if (!item.filename.empty()) { body += "; filename=\"" + item.filename + "\""; @@ -5437,18 +5443,18 @@ serialize_multipart_formdata_item_begin(const T &item, inline std::string serialize_multipart_formdata_item_end() { return "\r\n"; } inline std::string -serialize_multipart_formdata_finish(const std::string &boundary) { - return "--" + boundary + "--\r\n"; +serialize_multipart_formdata_finish(std::string_view boundary) { + return "--" + std::string(boundary) + "--\r\n"; } inline std::string -serialize_multipart_formdata_get_content_type(const std::string &boundary) { - return "multipart/form-data; boundary=" + boundary; +serialize_multipart_formdata_get_content_type(std::string_view boundary) { + return "multipart/form-data; boundary=" + std::string(boundary); } inline std::string serialize_multipart_formdata(const MultipartFormDataItems &items, - const std::string &boundary, bool finish = true) { + std::string_view boundary, bool finish = true) { std::string body; for (const auto &item : items) { @@ -5552,8 +5558,8 @@ inline std::string make_content_range_header_field( template bool process_multipart_ranges_data(const Request &req, - const std::string &boundary, - const std::string &content_type, + std::string_view boundary, + std::string_view content_type, size_t content_length, SToken stoken, CToken ctoken, Content content) { for (size_t i = 0; i < req.ranges.size(); i++) { @@ -5588,14 +5594,14 @@ bool process_multipart_ranges_data(const Request &req, } inline void make_multipart_ranges_data(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type, + std::string_view boundary, + std::string_view content_type, size_t content_length, std::string &data) { process_multipart_ranges_data( req, boundary, content_type, content_length, - [&](const std::string &token) { data += token; }, - [&](const std::string &token) { data += token; }, + [&](std::string_view token) { data += token; }, + [&](std::string_view token) { data += token; }, [&](size_t offset, size_t length) { assert(offset + length <= content_length); data += res.body.substr(offset, length); @@ -5604,15 +5610,15 @@ inline void make_multipart_ranges_data(const Request &req, Response &res, } inline size_t get_multipart_ranges_data_length(const Request &req, - const std::string &boundary, - const std::string &content_type, + std::string_view boundary, + std::string_view content_type, size_t content_length) { size_t data_length = 0; process_multipart_ranges_data( req, boundary, content_type, content_length, - [&](const std::string &token) { data_length += token.size(); }, - [&](const std::string &token) { data_length += token.size(); }, + [&](std::string_view token) { data_length += token.size(); }, + [&](std::string_view token) { data_length += token.size(); }, [&](size_t /*offset*/, size_t length) { data_length += length; return true; @@ -5624,13 +5630,13 @@ inline size_t get_multipart_ranges_data_length(const Request &req, template inline bool write_multipart_ranges_data(Stream &strm, const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type, + std::string_view boundary, + std::string_view content_type, size_t content_length, const T &is_shutting_down) { return process_multipart_ranges_data( req, boundary, content_type, content_length, - [&](const std::string &token) { strm.write(token); }, - [&](const std::string &token) { strm.write(token); }, + [&](std::string_view token) { strm.write(token); }, + [&](std::string_view token) { strm.write(token); }, [&](size_t offset, size_t length) { return write_content(strm, res.content_provider_, offset, length, is_shutting_down); @@ -5646,19 +5652,17 @@ inline bool expect_content(const Request &req) { return false; } -inline bool has_crlf(const std::string &s) { - auto p = s.c_str(); - while (*p) { - if (*p == '\r' || *p == '\n') { +inline bool has_crlf(std::string_view s) { + for (auto c : s) { + if (c == '\r' || c == '\n') { return true; } - p++; } return false; } #ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline std::string message_digest(const std::string &s, const EVP_MD *algo) { +inline std::string message_digest(std::string_view s, const EVP_MD *algo) { auto context = std::unique_ptr( EVP_MD_CTX_new(), EVP_MD_CTX_free); @@ -5678,15 +5682,15 @@ inline std::string message_digest(const std::string &s, const EVP_MD *algo) { return ss.str(); } -inline std::string MD5(const std::string &s) { +inline std::string MD5(std::string_view s) { return message_digest(s, EVP_md5()); } -inline std::string SHA_256(const std::string &s) { +inline std::string SHA_256(std::string_view s) { return message_digest(s, EVP_sha256()); } -inline std::string SHA_512(const std::string &s) { +inline std::string SHA_512(std::string_view s) { return message_digest(s, EVP_sha512()); } #endif @@ -5842,9 +5846,9 @@ static WSInit wsinit_; #ifdef CPPHTTPLIB_OPENSSL_SUPPORT inline std::pair make_digest_authentication_header( - const Request &req, const std::map &auth, - size_t cnonce_count, const std::string &cnonce, const std::string &username, - const std::string &password, bool is_proxy = false) { + const Request &req, const std::map &auth, + size_t cnonce_count, std::string_view cnonce, std::string_view username, + std::string_view password, bool is_proxy = false) { std::string nc; { std::stringstream ss; @@ -5907,7 +5911,7 @@ inline std::pair make_digest_authentication_header( #endif inline bool parse_www_authenticate(const Response &res, - std::map &auth, + std::map &auth, bool is_proxy) { auto auth_key = is_proxy ? "Proxy-Authenticate" : "WWW-Authenticate"; if (res.has_header(auth_key)) { @@ -5954,7 +5958,7 @@ private: }; } // namespace detail -inline std::string hosted_at(const std::string &hostname) { +inline std::string hosted_at(std::string_view hostname) { std::vector addrs; hosted_at(hostname, addrs); if (addrs.empty()) { @@ -5963,7 +5967,7 @@ inline std::string hosted_at(const std::string &hostname) { return addrs[0]; } -inline void hosted_at(const std::string &hostname, +inline void hosted_at(std::string_view hostname, std::vector &addrs) { struct addrinfo hints; struct addrinfo *result; @@ -5973,7 +5977,8 @@ inline void hosted_at(const std::string &hostname, hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = 0; - if (getaddrinfo(hostname.c_str(), nullptr, &hints, &result)) { + auto hostname_str = std::string(hostname); + if (getaddrinfo(hostname_str.c_str(), nullptr, &hints, &result)) { #if defined __linux__ && !defined __ANDROID__ res_init(); #endif @@ -5993,11 +5998,11 @@ inline void hosted_at(const std::string &hostname, } } -inline std::string append_query_params(const std::string &path, +inline std::string append_query_params(std::string_view path, const Params ¶ms) { - std::string path_with_query = path; + std::string path_with_query(path); const static std::regex re("[^?]+\\?.*"); - auto delm = std::regex_match(path, re) ? '&' : '?'; + auto delm = std::regex_match(path_with_query, re) ? '&' : '?'; path_with_query += delm + detail::params_to_query_str(params); return path_with_query; } @@ -6024,50 +6029,50 @@ make_range_header(const Ranges &ranges) { } inline std::pair -make_basic_authentication_header(const std::string &username, - const std::string &password, bool is_proxy) { - auto field = "Basic " + detail::base64_encode(username + ":" + password); +make_basic_authentication_header(std::string_view username, + std::string_view password, bool is_proxy) { + auto field = "Basic " + detail::base64_encode(std::string(username) + ":" + std::string(password)); auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; return std::make_pair(key, std::move(field)); } inline std::pair -make_bearer_token_authentication_header(const std::string &token, +make_bearer_token_authentication_header(std::string_view token, bool is_proxy = false) { - auto field = "Bearer " + token; + auto field = "Bearer " + std::string(token); auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; return std::make_pair(key, std::move(field)); } // Request implementation -inline bool Request::has_header(const std::string &key) const { +inline bool Request::has_header(std::string_view key) const { return detail::has_header(headers, key); } -inline std::string Request::get_header_value(const std::string &key, +inline std::string Request::get_header_value(std::string_view key, const char *def, size_t id) const { return detail::get_header_value(headers, key, def, id); } -inline size_t Request::get_header_value_count(const std::string &key) const { - auto r = headers.equal_range(key); +inline size_t Request::get_header_value_count(std::string_view key) const { + auto r = headers.equal_range(std::string(key)); return static_cast(std::distance(r.first, r.second)); } -inline void Request::set_header(const std::string &key, - const std::string &val) { +inline void Request::set_header(std::string_view key, + std::string_view val) { if (!detail::has_crlf(key) && !detail::has_crlf(val)) { headers.emplace(key, val); } } -inline bool Request::has_param(const std::string &key) const { - return params.find(key) != params.end(); +inline bool Request::has_param(std::string_view key) const { + return params.find(std::string(key)) != params.end(); } -inline std::string Request::get_param_value(const std::string &key, +inline std::string Request::get_param_value(std::string_view key, size_t id) const { - auto rng = params.equal_range(key); + auto rng = params.equal_range(std::string(key)); auto it = rng.first; std::advance(it, static_cast(id)); if (it != rng.second) { @@ -6076,8 +6081,8 @@ inline std::string Request::get_param_value(const std::string &key, return std::string(); } -inline size_t Request::get_param_value_count(const std::string &key) const { - auto r = params.equal_range(key); +inline size_t Request::get_param_value_count(std::string_view key) const { + auto r = params.equal_range(std::string(key)); return static_cast(std::distance(r.first, r.second)); } @@ -6086,12 +6091,12 @@ inline bool Request::is_multipart_form_data() const { return !content_type.rfind("multipart/form-data", 0); } -inline bool Request::has_file(const std::string &key) const { - return files.find(key) != files.end(); +inline bool Request::has_file(std::string_view key) const { + return files.find(std::string(key)) != files.end(); } -inline MultipartFormData Request::get_file_value(const std::string &key) const { - auto it = files.find(key); +inline MultipartFormData Request::get_file_value(std::string_view key) const { + auto it = files.find(std::string(key)); if (it != files.end()) { return it->second; } @@ -6099,9 +6104,9 @@ inline MultipartFormData Request::get_file_value(const std::string &key) const { } inline std::vector -Request::get_file_values(const std::string &key) const { +Request::get_file_values(std::string_view key) const { std::vector values; - auto rng = files.equal_range(key); + auto rng = files.equal_range(std::string(key)); for (auto it = rng.first; it != rng.second; it++) { values.push_back(it->second); } @@ -6109,29 +6114,29 @@ Request::get_file_values(const std::string &key) const { } // Response implementation -inline bool Response::has_header(const std::string &key) const { - return headers.find(key) != headers.end(); +inline bool Response::has_header(std::string_view key) const { + return headers.find(std::string(key)) != headers.end(); } -inline std::string Response::get_header_value(const std::string &key, +inline std::string Response::get_header_value(std::string_view key, const char *def, size_t id) const { return detail::get_header_value(headers, key, def, id); } -inline size_t Response::get_header_value_count(const std::string &key) const { - auto r = headers.equal_range(key); +inline size_t Response::get_header_value_count(std::string_view key) const { + auto r = headers.equal_range(std::string(key)); return static_cast(std::distance(r.first, r.second)); } -inline void Response::set_header(const std::string &key, - const std::string &val) { +inline void Response::set_header(std::string_view key, + std::string_view val) { if (!detail::has_crlf(key) && !detail::has_crlf(val)) { headers.emplace(key, val); } } -inline void Response::set_redirect(const std::string &url, int stat) { +inline void Response::set_redirect(std::string_view url, int stat) { if (!detail::has_crlf(url)) { set_header("Location", url); if (300 <= stat && stat < 400) { @@ -6143,7 +6148,7 @@ inline void Response::set_redirect(const std::string &url, int stat) { } inline void Response::set_content(const char *s, size_t n, - const std::string &content_type) { + std::string_view content_type) { body.assign(s, n); auto rng = headers.equal_range("Content-Type"); @@ -6151,13 +6156,13 @@ inline void Response::set_content(const char *s, size_t n, set_header("Content-Type", content_type); } -inline void Response::set_content(const std::string &s, - const std::string &content_type) { +inline void Response::set_content(std::string_view s, + std::string_view content_type) { set_content(s.data(), s.size(), content_type); } inline void Response::set_content(std::string &&s, - const std::string &content_type) { + std::string_view content_type) { body = std::move(s); auto rng = headers.equal_range("Content-Type"); @@ -6166,7 +6171,7 @@ inline void Response::set_content(std::string &&s, } inline void Response::set_content_provider( - size_t in_length, const std::string &content_type, ContentProvider provider, + size_t in_length, std::string_view content_type, ContentProvider provider, ContentProviderResourceReleaser resource_releaser) { set_header("Content-Type", content_type); content_length_ = in_length; @@ -6178,7 +6183,7 @@ inline void Response::set_content_provider( } inline void Response::set_content_provider( - const std::string &content_type, ContentProviderWithoutLength provider, + std::string_view content_type, ContentProviderWithoutLength provider, ContentProviderResourceReleaser resource_releaser) { set_header("Content-Type", content_type); content_length_ = 0; @@ -6188,7 +6193,7 @@ inline void Response::set_content_provider( } inline void Response::set_chunked_content_provider( - const std::string &content_type, ContentProviderWithoutLength provider, + std::string_view content_type, ContentProviderWithoutLength provider, ContentProviderResourceReleaser resource_releaser) { set_header("Content-Type", content_type); content_length_ = 0; @@ -6197,30 +6202,30 @@ inline void Response::set_chunked_content_provider( is_chunked_content_provider_ = true; } -inline void Response::set_file_content(const std::string &path, - const std::string &content_type) { +inline void Response::set_file_content(std::string_view path, + std::string_view content_type) { file_content_path_ = path; file_content_content_type_ = content_type; } -inline void Response::set_file_content(const std::string &path) { +inline void Response::set_file_content(std::string_view path) { file_content_path_ = path; } // Result implementation -inline bool Result::has_request_header(const std::string &key) const { - return request_headers_.find(key) != request_headers_.end(); +inline bool Result::has_request_header(std::string_view key) const { + return request_headers_.find(std::string(key)) != request_headers_.end(); } -inline std::string Result::get_request_header_value(const std::string &key, +inline std::string Result::get_request_header_value(std::string_view key, const char *def, size_t id) const { return detail::get_header_value(request_headers_, key, def, id); } inline size_t -Result::get_request_header_value_count(const std::string &key) const { - auto r = request_headers_.equal_range(key); +Result::get_request_header_value_count(std::string_view key) const { + auto r = request_headers_.equal_range(std::string(key)); return static_cast(std::distance(r.first, r.second)); } @@ -6229,7 +6234,7 @@ inline ssize_t Stream::write(const char *ptr) { return write(ptr, strlen(ptr)); } -inline ssize_t Stream::write(const std::string &s) { +inline ssize_t Stream::write(std::string_view s) { return write(s.data(), s.size()); } @@ -6358,7 +6363,7 @@ inline socket_t BufferStream::socket() const { return 0; } inline const std::string &BufferStream::get_buffer() const { return buffer; } -inline PathParamsMatcher::PathParamsMatcher(const std::string &pattern) { +inline PathParamsMatcher::PathParamsMatcher(std::string_view pattern) { static constexpr char marker[] = "/:"; // One past the last ending position of a path param substring @@ -6380,7 +6385,7 @@ inline PathParamsMatcher::PathParamsMatcher(const std::string &pattern) { } static_fragments_.push_back( - pattern.substr(last_param_end, marker_pos - last_param_end + 1)); + std::string(pattern.substr(last_param_end, marker_pos - last_param_end + 1))); const auto param_name_start = marker_pos + 2; @@ -6393,20 +6398,21 @@ inline PathParamsMatcher::PathParamsMatcher(const std::string &pattern) { pattern.substr(param_name_start, sep_pos - param_name_start); #ifndef CPPHTTPLIB_NO_EXCEPTIONS - if (param_name_set.find(param_name) != param_name_set.cend()) { - std::string msg = "Encountered path parameter '" + param_name + - "' multiple times in route pattern '" + pattern + "'."; + auto param_name_string = std::string(param_name); + if (param_name_set.find(param_name_string) != param_name_set.cend()) { + std::string msg = "Encountered path parameter '" + param_name_string + + "' multiple times in route pattern '" + std::string(pattern) + "'."; throw std::invalid_argument(msg); } #endif - param_names_.push_back(std::move(param_name)); + param_names_.push_back(std::string(param_name)); last_param_end = sep_pos + 1; } if (last_param_end < pattern.length()) { - static_fragments_.push_back(pattern.substr(last_param_end)); + static_fragments_.push_back(std::string(pattern.substr(last_param_end))); } } @@ -6475,7 +6481,7 @@ inline Server::Server() inline Server::~Server() = default; inline std::unique_ptr -Server::make_matcher(const std::string &pattern) { +Server::make_matcher(std::string_view pattern) { if (pattern.find("/:") != std::string::npos) { return detail::make_unique(pattern); } else { @@ -6483,84 +6489,84 @@ Server::make_matcher(const std::string &pattern) { } } -inline Server &Server::Get(const std::string &pattern, Handler handler) { +inline Server &Server::Get(std::string_view pattern, Handler handler) { get_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } -inline Server &Server::Post(const std::string &pattern, Handler handler) { +inline Server &Server::Post(std::string_view pattern, Handler handler) { std::cout << "post:" << pattern << std::endl; post_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } -inline Server &Server::Post(const std::string &pattern, +inline Server &Server::Post(std::string_view pattern, HandlerWithContentReader handler) { post_handlers_for_content_reader_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } -inline Server &Server::Put(const std::string &pattern, Handler handler) { +inline Server &Server::Put(std::string_view pattern, Handler handler) { put_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } -inline Server &Server::Put(const std::string &pattern, +inline Server &Server::Put(std::string_view pattern, HandlerWithContentReader handler) { put_handlers_for_content_reader_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } -inline Server &Server::Patch(const std::string &pattern, Handler handler) { +inline Server &Server::Patch(std::string_view pattern, Handler handler) { patch_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } -inline Server &Server::Patch(const std::string &pattern, +inline Server &Server::Patch(std::string_view pattern, HandlerWithContentReader handler) { patch_handlers_for_content_reader_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } -inline Server &Server::Delete(const std::string &pattern, Handler handler) { +inline Server &Server::Delete(std::string_view pattern, Handler handler) { delete_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } -inline Server &Server::Delete(const std::string &pattern, +inline Server &Server::Delete(std::string_view pattern, HandlerWithContentReader handler) { delete_handlers_for_content_reader_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } -inline Server &Server::Options(const std::string &pattern, Handler handler) { +inline Server &Server::Options(std::string_view pattern, Handler handler) { options_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); return *this; } -inline bool Server::set_base_dir(const std::string &dir, - const std::string &mount_point) { +inline bool Server::set_base_dir(std::string_view dir, + std::string_view mount_point) { return set_mount_point(mount_point, dir); } -inline bool Server::set_mount_point(const std::string &mount_point, - const std::string &dir, Headers headers) { +inline bool Server::set_mount_point(std::string_view mount_point, + std::string_view dir, Headers headers) { detail::FileStat stat(dir); if (stat.is_dir()) { - std::string mnt = !mount_point.empty() ? mount_point : "/"; + std::string mnt = !mount_point.empty() ? std::string(mount_point) : "/"; if (!mnt.empty() && mnt[0] == '/') { - base_dirs_.push_back({mnt, dir, std::move(headers)}); + base_dirs_.push_back({mnt, std::string(dir), std::move(headers)}); return true; } } return false; } -inline bool Server::remove_mount_point(const std::string &mount_point) { +inline bool Server::remove_mount_point(std::string_view mount_point) { for (auto it = base_dirs_.begin(); it != base_dirs_.end(); ++it) { if (it->mount_point == mount_point) { base_dirs_.erase(it); @@ -6571,14 +6577,14 @@ inline bool Server::remove_mount_point(const std::string &mount_point) { } inline Server & -Server::set_file_extension_and_mimetype_mapping(const std::string &ext, - const std::string &mime) { - file_extension_and_mimetype_map_[ext] = mime; +Server::set_file_extension_and_mimetype_mapping(std::string_view ext, + std::string_view mime) { + file_extension_and_mimetype_map_[std::string(ext)] = std::string(mime); return *this; } -inline Server &Server::set_default_file_mimetype(const std::string &mime) { - default_file_mimetype_ = mime; +inline Server &Server::set_default_file_mimetype(std::string_view mime) { + default_file_mimetype_ = std::string(mime); return *this; } @@ -6692,7 +6698,7 @@ inline Server &Server::set_payload_max_length(size_t length) { return *this; } -inline bool Server::bind_to_port(const std::string &host, int port, +inline bool Server::bind_to_port(std::string_view host, int port, int socket_flags) { auto ret = bind_internal(host, port, socket_flags); if (ret == -1) { @@ -6701,7 +6707,7 @@ inline bool Server::bind_to_port(const std::string &host, int port, return ret >= 0; } -inline int Server::bind_to_any_port(const std::string &host, int socket_flags) { +inline int Server::bind_to_any_port(std::string_view host, int socket_flags) { auto ret = bind_internal(host, 0, socket_flags); if (ret == -1) { is_decommisioned = true; @@ -6711,7 +6717,7 @@ inline int Server::bind_to_any_port(const std::string &host, int socket_flags) { inline bool Server::listen_after_bind() { return listen_internal(); } -inline bool Server::listen(const std::string &host, int port, +inline bool Server::listen(std::string_view host, int port, int socket_flags) { bool b1 = bind_to_port(host, port, socket_flags); if (!b1) { @@ -6906,8 +6912,8 @@ inline bool Server::write_response_core(Stream &strm, bool close_connection, inline bool Server::write_content_with_provider(Stream &strm, const Request &req, - Response &res, const std::string &boundary, - const std::string &content_type) { + Response &res, std::string_view boundary, + std::string_view content_type) { auto is_shutting_down = [this]() { return this->svr_sock_ == INVALID_SOCKET; }; @@ -7113,7 +7119,7 @@ inline bool Server::handle_file_request(const Request &req, Response &res, } inline socket_t -Server::create_server_socket(const std::string &host, int port, +Server::create_server_socket(std::string_view host, int port, int socket_flags, SocketOptions socket_options) const { return detail::create_socket( @@ -7130,7 +7136,7 @@ Server::create_server_socket(const std::string &host, int port, }); } -inline int Server::bind_internal(const std::string &host, int port, +inline int Server::bind_internal(std::string_view host, int port, int socket_flags) { if (is_decommisioned) { return -1; @@ -7476,8 +7482,8 @@ inline bool Server::dispatch_request_for_content_reader( } inline bool -Server::process_request(Stream &strm, const std::string &remote_addr, - int remote_port, const std::string &local_addr, +Server::process_request(Stream &strm, std::string_view remote_addr, + int remote_port, std::string_view local_addr, int local_port, bool close_connection, bool &connection_closed, const std::function &setup_request) { @@ -7692,15 +7698,15 @@ inline bool Server::process_and_close_socket(socket_t sock) { } // HTTP client implementation -inline ClientImpl::ClientImpl(const std::string &host) +inline ClientImpl::ClientImpl(std::string_view host) : ClientImpl(host, 80, std::string(), std::string()) {} -inline ClientImpl::ClientImpl(const std::string &host, int port) +inline ClientImpl::ClientImpl(std::string_view host, int port) : ClientImpl(host, port, std::string(), std::string()) {} -inline ClientImpl::ClientImpl(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) +inline ClientImpl::ClientImpl(std::string_view host, int port, + std::string_view client_cert_path, + std::string_view client_key_path) : host_(detail::escape_abstract_namespace_unix_domain(host)), port_(port), host_and_port_(adjust_host_string(host_) + ":" + std::to_string(port)), client_cert_path_(client_cert_path), client_key_path_(client_key_path) {} @@ -8330,7 +8336,7 @@ inline std::unique_ptr ClientImpl::send_with_content_provider( Request &req, const char *body, size_t content_length, ContentProvider content_provider, ContentProviderWithoutLength content_provider_without_length, - const std::string &content_type, Error &error) { + std::string_view content_type, Error &error) { if (!content_type.empty()) { req.set_header("Content-Type", content_type); } @@ -8410,10 +8416,10 @@ inline std::unique_ptr ClientImpl::send_with_content_provider( } inline Result ClientImpl::send_with_content_provider( - const std::string &method, const std::string &path, const Headers &headers, + std::string_view method, std::string_view path, const Headers &headers, const char *body, size_t content_length, ContentProvider content_provider, ContentProviderWithoutLength content_provider_without_length, - const std::string &content_type, Progress progress) { + std::string_view content_type, Progress progress) { Request req; req.method = method; req.headers = headers; @@ -8430,11 +8436,11 @@ inline Result ClientImpl::send_with_content_provider( } inline std::string -ClientImpl::adjust_host_string(const std::string &host) const { +ClientImpl::adjust_host_string(std::string_view host) const { if (host.find(':') != std::string::npos) { - return "[" + host + "]"; + return "[" + std::string(host) + "]"; } - return host; + return std::string(host); } inline bool ClientImpl::process_request(Stream &strm, Request &req, @@ -8539,7 +8545,7 @@ inline bool ClientImpl::process_request(Stream &strm, Request &req, } inline ContentProviderWithoutLength ClientImpl::get_multipart_content_provider( - const std::string &boundary, const MultipartFormDataItems &items, + std::string_view boundary, const MultipartFormDataItems &items, const MultipartFormDataProviderItems &provider_items) const { size_t cur_item = 0; size_t cur_start = 0; @@ -8592,19 +8598,19 @@ ClientImpl::process_socket(const Socket &socket, inline bool ClientImpl::is_ssl() const { return false; } -inline Result ClientImpl::Get(const std::string &path) { +inline Result ClientImpl::Get(std::string_view path) { return Get(path, Headers(), Progress()); } -inline Result ClientImpl::Get(const std::string &path, Progress progress) { +inline Result ClientImpl::Get(std::string_view path, Progress progress) { return Get(path, Headers(), std::move(progress)); } -inline Result ClientImpl::Get(const std::string &path, const Headers &headers) { +inline Result ClientImpl::Get(std::string_view path, const Headers &headers) { return Get(path, headers, Progress()); } -inline Result ClientImpl::Get(const std::string &path, const Headers &headers, +inline Result ClientImpl::Get(std::string_view path, const Headers &headers, Progress progress) { Request req; req.method = "GET"; @@ -8615,45 +8621,45 @@ inline Result ClientImpl::Get(const std::string &path, const Headers &headers, return send_(std::move(req)); } -inline Result ClientImpl::Get(const std::string &path, +inline Result ClientImpl::Get(std::string_view path, ContentReceiver content_receiver) { return Get(path, Headers(), nullptr, std::move(content_receiver), nullptr); } -inline Result ClientImpl::Get(const std::string &path, +inline Result ClientImpl::Get(std::string_view path, ContentReceiver content_receiver, Progress progress) { return Get(path, Headers(), nullptr, std::move(content_receiver), std::move(progress)); } -inline Result ClientImpl::Get(const std::string &path, const Headers &headers, +inline Result ClientImpl::Get(std::string_view path, const Headers &headers, ContentReceiver content_receiver) { return Get(path, headers, nullptr, std::move(content_receiver), nullptr); } -inline Result ClientImpl::Get(const std::string &path, const Headers &headers, +inline Result ClientImpl::Get(std::string_view path, const Headers &headers, ContentReceiver content_receiver, Progress progress) { return Get(path, headers, nullptr, std::move(content_receiver), std::move(progress)); } -inline Result ClientImpl::Get(const std::string &path, +inline Result ClientImpl::Get(std::string_view path, ResponseHandler response_handler, ContentReceiver content_receiver) { return Get(path, Headers(), std::move(response_handler), std::move(content_receiver), nullptr); } -inline Result ClientImpl::Get(const std::string &path, const Headers &headers, +inline Result ClientImpl::Get(std::string_view path, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver) { return Get(path, headers, std::move(response_handler), std::move(content_receiver), nullptr); } -inline Result ClientImpl::Get(const std::string &path, +inline Result ClientImpl::Get(std::string_view path, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress) { @@ -8661,7 +8667,7 @@ inline Result ClientImpl::Get(const std::string &path, std::move(content_receiver), std::move(progress)); } -inline Result ClientImpl::Get(const std::string &path, const Headers &headers, +inline Result ClientImpl::Get(std::string_view path, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress) { @@ -8680,7 +8686,7 @@ inline Result ClientImpl::Get(const std::string &path, const Headers &headers, return send_(std::move(req)); } -inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, +inline Result ClientImpl::Get(std::string_view path, const Params ¶ms, const Headers &headers, Progress progress) { if (params.empty()) { return Get(path, headers); @@ -8690,7 +8696,7 @@ inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, return Get(path_with_query, headers, std::move(progress)); } -inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, +inline Result ClientImpl::Get(std::string_view path, const Params ¶ms, const Headers &headers, ContentReceiver content_receiver, Progress progress) { @@ -8698,7 +8704,7 @@ inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, std::move(progress)); } -inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, +inline Result ClientImpl::Get(std::string_view path, const Params ¶ms, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, @@ -8713,11 +8719,11 @@ inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, std::move(content_receiver), std::move(progress)); } -inline Result ClientImpl::Head(const std::string &path) { +inline Result ClientImpl::Head(std::string_view path) { return Head(path, Headers()); } -inline Result ClientImpl::Head(const std::string &path, +inline Result ClientImpl::Head(std::string_view path, const Headers &headers) { Request req; req.method = "HEAD"; @@ -8727,117 +8733,117 @@ inline Result ClientImpl::Head(const std::string &path, return send_(std::move(req)); } -inline Result ClientImpl::Post(const std::string &path) { +inline Result ClientImpl::Post(std::string_view path) { return Post(path, std::string(), std::string()); } -inline Result ClientImpl::Post(const std::string &path, +inline Result ClientImpl::Post(std::string_view path, const Headers &headers) { return Post(path, headers, nullptr, 0, std::string()); } -inline Result ClientImpl::Post(const std::string &path, const char *body, +inline Result ClientImpl::Post(std::string_view path, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return Post(path, Headers(), body, content_length, content_type, nullptr); } -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, +inline Result ClientImpl::Post(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return send_with_content_provider("POST", path, headers, body, content_length, nullptr, nullptr, content_type, nullptr); } -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, +inline Result ClientImpl::Post(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, + std::string_view content_type, Progress progress) { return send_with_content_provider("POST", path, headers, body, content_length, nullptr, nullptr, content_type, progress); } -inline Result ClientImpl::Post(const std::string &path, const std::string &body, - const std::string &content_type) { +inline Result ClientImpl::Post(std::string_view path, std::string_view body, + std::string_view content_type) { return Post(path, Headers(), body, content_type); } -inline Result ClientImpl::Post(const std::string &path, const std::string &body, - const std::string &content_type, +inline Result ClientImpl::Post(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress) { return Post(path, Headers(), body, content_type, progress); } -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type) { +inline Result ClientImpl::Post(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type) { return send_with_content_provider("POST", path, headers, body.data(), body.size(), nullptr, nullptr, content_type, nullptr); } -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, +inline Result ClientImpl::Post(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type, Progress progress) { return send_with_content_provider("POST", path, headers, body.data(), body.size(), nullptr, nullptr, content_type, progress); } -inline Result ClientImpl::Post(const std::string &path, const Params ¶ms) { +inline Result ClientImpl::Post(std::string_view path, const Params ¶ms) { return Post(path, Headers(), params); } -inline Result ClientImpl::Post(const std::string &path, size_t content_length, +inline Result ClientImpl::Post(std::string_view path, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return Post(path, Headers(), content_length, std::move(content_provider), content_type); } -inline Result ClientImpl::Post(const std::string &path, +inline Result ClientImpl::Post(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return Post(path, Headers(), std::move(content_provider), content_type); } -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, +inline Result ClientImpl::Post(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return send_with_content_provider("POST", path, headers, nullptr, content_length, std::move(content_provider), nullptr, content_type, nullptr); } -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, +inline Result ClientImpl::Post(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return send_with_content_provider("POST", path, headers, nullptr, 0, nullptr, std::move(content_provider), content_type, nullptr); } -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, +inline Result ClientImpl::Post(std::string_view path, const Headers &headers, const Params ¶ms) { auto query = detail::params_to_query_str(params); return Post(path, headers, query, "application/x-www-form-urlencoded"); } -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, +inline Result ClientImpl::Post(std::string_view path, const Headers &headers, const Params ¶ms, Progress progress) { auto query = detail::params_to_query_str(params); return Post(path, headers, query, "application/x-www-form-urlencoded", progress); } -inline Result ClientImpl::Post(const std::string &path, +inline Result ClientImpl::Post(std::string_view path, const MultipartFormDataItems &items) { return Post(path, Headers(), items); } -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, +inline Result ClientImpl::Post(std::string_view path, const Headers &headers, const MultipartFormDataItems &items) { const auto &boundary = detail::make_multipart_data_boundary(); const auto &content_type = @@ -8846,9 +8852,9 @@ inline Result ClientImpl::Post(const std::string &path, const Headers &headers, return Post(path, headers, body, content_type); } -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, +inline Result ClientImpl::Post(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, - const std::string &boundary) { + std::string_view boundary) { if (!detail::is_multipart_boundary_chars_valid(boundary)) { return Result{nullptr, Error::UnsupportedMultipartBoundaryChars}; } @@ -8860,7 +8866,7 @@ inline Result ClientImpl::Post(const std::string &path, const Headers &headers, } inline Result -ClientImpl::Post(const std::string &path, const Headers &headers, +ClientImpl::Post(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, const MultipartFormDataProviderItems &provider_items) { const auto &boundary = detail::make_multipart_data_boundary(); @@ -8872,112 +8878,112 @@ ClientImpl::Post(const std::string &path, const Headers &headers, content_type, nullptr); } -inline Result ClientImpl::Put(const std::string &path) { +inline Result ClientImpl::Put(std::string_view path) { return Put(path, std::string(), std::string()); } -inline Result ClientImpl::Put(const std::string &path, const char *body, +inline Result ClientImpl::Put(std::string_view path, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return Put(path, Headers(), body, content_length, content_type); } -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, +inline Result ClientImpl::Put(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return send_with_content_provider("PUT", path, headers, body, content_length, nullptr, nullptr, content_type, nullptr); } -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, +inline Result ClientImpl::Put(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, + std::string_view content_type, Progress progress) { return send_with_content_provider("PUT", path, headers, body, content_length, nullptr, nullptr, content_type, progress); } -inline Result ClientImpl::Put(const std::string &path, const std::string &body, - const std::string &content_type) { +inline Result ClientImpl::Put(std::string_view path, std::string_view body, + std::string_view content_type) { return Put(path, Headers(), body, content_type); } -inline Result ClientImpl::Put(const std::string &path, const std::string &body, - const std::string &content_type, +inline Result ClientImpl::Put(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress) { return Put(path, Headers(), body, content_type, progress); } -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type) { +inline Result ClientImpl::Put(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type) { return send_with_content_provider("PUT", path, headers, body.data(), body.size(), nullptr, nullptr, content_type, nullptr); } -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, +inline Result ClientImpl::Put(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type, Progress progress) { return send_with_content_provider("PUT", path, headers, body.data(), body.size(), nullptr, nullptr, content_type, progress); } -inline Result ClientImpl::Put(const std::string &path, size_t content_length, +inline Result ClientImpl::Put(std::string_view path, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return Put(path, Headers(), content_length, std::move(content_provider), content_type); } -inline Result ClientImpl::Put(const std::string &path, +inline Result ClientImpl::Put(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return Put(path, Headers(), std::move(content_provider), content_type); } -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, +inline Result ClientImpl::Put(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return send_with_content_provider("PUT", path, headers, nullptr, content_length, std::move(content_provider), nullptr, content_type, nullptr); } -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, +inline Result ClientImpl::Put(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return send_with_content_provider("PUT", path, headers, nullptr, 0, nullptr, std::move(content_provider), content_type, nullptr); } -inline Result ClientImpl::Put(const std::string &path, const Params ¶ms) { +inline Result ClientImpl::Put(std::string_view path, const Params ¶ms) { return Put(path, Headers(), params); } -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, +inline Result ClientImpl::Put(std::string_view path, const Headers &headers, const Params ¶ms) { auto query = detail::params_to_query_str(params); return Put(path, headers, query, "application/x-www-form-urlencoded"); } -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, +inline Result ClientImpl::Put(std::string_view path, const Headers &headers, const Params ¶ms, Progress progress) { auto query = detail::params_to_query_str(params); return Put(path, headers, query, "application/x-www-form-urlencoded", progress); } -inline Result ClientImpl::Put(const std::string &path, +inline Result ClientImpl::Put(std::string_view path, const MultipartFormDataItems &items) { return Put(path, Headers(), items); } -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, +inline Result ClientImpl::Put(std::string_view path, const Headers &headers, const MultipartFormDataItems &items) { const auto &boundary = detail::make_multipart_data_boundary(); const auto &content_type = @@ -8986,9 +8992,9 @@ inline Result ClientImpl::Put(const std::string &path, const Headers &headers, return Put(path, headers, body, content_type); } -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, +inline Result ClientImpl::Put(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, - const std::string &boundary) { + std::string_view boundary) { if (!detail::is_multipart_boundary_chars_valid(boundary)) { return Result{nullptr, Error::UnsupportedMultipartBoundaryChars}; } @@ -9000,7 +9006,7 @@ inline Result ClientImpl::Put(const std::string &path, const Headers &headers, } inline Result -ClientImpl::Put(const std::string &path, const Headers &headers, +ClientImpl::Put(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, const MultipartFormDataProviderItems &provider_items) { const auto &boundary = detail::make_multipart_data_boundary(); @@ -9012,129 +9018,129 @@ ClientImpl::Put(const std::string &path, const Headers &headers, content_type, nullptr); } -inline Result ClientImpl::Patch(const std::string &path) { +inline Result ClientImpl::Patch(std::string_view path) { return Patch(path, std::string(), std::string()); } -inline Result ClientImpl::Patch(const std::string &path, const char *body, +inline Result ClientImpl::Patch(std::string_view path, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return Patch(path, Headers(), body, content_length, content_type); } -inline Result ClientImpl::Patch(const std::string &path, const char *body, +inline Result ClientImpl::Patch(std::string_view path, const char *body, size_t content_length, - const std::string &content_type, + std::string_view content_type, Progress progress) { return Patch(path, Headers(), body, content_length, content_type, progress); } -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, +inline Result ClientImpl::Patch(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return Patch(path, headers, body, content_length, content_type, nullptr); } -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, +inline Result ClientImpl::Patch(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, + std::string_view content_type, Progress progress) { return send_with_content_provider("PATCH", path, headers, body, content_length, nullptr, nullptr, content_type, progress); } -inline Result ClientImpl::Patch(const std::string &path, - const std::string &body, - const std::string &content_type) { +inline Result ClientImpl::Patch(std::string_view path, + std::string_view body, + std::string_view content_type) { return Patch(path, Headers(), body, content_type); } -inline Result ClientImpl::Patch(const std::string &path, - const std::string &body, - const std::string &content_type, +inline Result ClientImpl::Patch(std::string_view path, + std::string_view body, + std::string_view content_type, Progress progress) { return Patch(path, Headers(), body, content_type, progress); } -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type) { +inline Result ClientImpl::Patch(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type) { return Patch(path, headers, body, content_type, nullptr); } -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, +inline Result ClientImpl::Patch(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type, Progress progress) { return send_with_content_provider("PATCH", path, headers, body.data(), body.size(), nullptr, nullptr, content_type, progress); } -inline Result ClientImpl::Patch(const std::string &path, size_t content_length, +inline Result ClientImpl::Patch(std::string_view path, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return Patch(path, Headers(), content_length, std::move(content_provider), content_type); } -inline Result ClientImpl::Patch(const std::string &path, +inline Result ClientImpl::Patch(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return Patch(path, Headers(), std::move(content_provider), content_type); } -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, +inline Result ClientImpl::Patch(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return send_with_content_provider("PATCH", path, headers, nullptr, content_length, std::move(content_provider), nullptr, content_type, nullptr); } -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, +inline Result ClientImpl::Patch(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return send_with_content_provider("PATCH", path, headers, nullptr, 0, nullptr, std::move(content_provider), content_type, nullptr); } -inline Result ClientImpl::Delete(const std::string &path) { +inline Result ClientImpl::Delete(std::string_view path) { return Delete(path, Headers(), std::string(), std::string()); } -inline Result ClientImpl::Delete(const std::string &path, +inline Result ClientImpl::Delete(std::string_view path, const Headers &headers) { return Delete(path, headers, std::string(), std::string()); } -inline Result ClientImpl::Delete(const std::string &path, const char *body, +inline Result ClientImpl::Delete(std::string_view path, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return Delete(path, Headers(), body, content_length, content_type); } -inline Result ClientImpl::Delete(const std::string &path, const char *body, +inline Result ClientImpl::Delete(std::string_view path, const char *body, size_t content_length, - const std::string &content_type, + std::string_view content_type, Progress progress) { return Delete(path, Headers(), body, content_length, content_type, progress); } -inline Result ClientImpl::Delete(const std::string &path, +inline Result ClientImpl::Delete(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return Delete(path, headers, body, content_length, content_type, nullptr); } -inline Result ClientImpl::Delete(const std::string &path, +inline Result ClientImpl::Delete(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, + std::string_view content_type, Progress progress) { Request req; req.method = "DELETE"; @@ -9150,41 +9156,41 @@ inline Result ClientImpl::Delete(const std::string &path, return send_(std::move(req)); } -inline Result ClientImpl::Delete(const std::string &path, - const std::string &body, - const std::string &content_type) { +inline Result ClientImpl::Delete(std::string_view path, + std::string_view body, + std::string_view content_type) { return Delete(path, Headers(), body.data(), body.size(), content_type); } -inline Result ClientImpl::Delete(const std::string &path, - const std::string &body, - const std::string &content_type, +inline Result ClientImpl::Delete(std::string_view path, + std::string_view body, + std::string_view content_type, Progress progress) { return Delete(path, Headers(), body.data(), body.size(), content_type, progress); } -inline Result ClientImpl::Delete(const std::string &path, +inline Result ClientImpl::Delete(std::string_view path, const Headers &headers, - const std::string &body, - const std::string &content_type) { + std::string_view body, + std::string_view content_type) { return Delete(path, headers, body.data(), body.size(), content_type); } -inline Result ClientImpl::Delete(const std::string &path, +inline Result ClientImpl::Delete(std::string_view path, const Headers &headers, - const std::string &body, - const std::string &content_type, + std::string_view body, + std::string_view content_type, Progress progress) { return Delete(path, headers, body.data(), body.size(), content_type, progress); } -inline Result ClientImpl::Options(const std::string &path) { +inline Result ClientImpl::Options(std::string_view path) { return Options(path, Headers()); } -inline Result ClientImpl::Options(const std::string &path, +inline Result ClientImpl::Options(std::string_view path, const Headers &headers) { Request req; req.method = "OPTIONS"; @@ -9243,19 +9249,19 @@ inline void ClientImpl::set_write_timeout(time_t sec, time_t usec) { write_timeout_usec_ = usec; } -inline void ClientImpl::set_basic_auth(const std::string &username, - const std::string &password) { +inline void ClientImpl::set_basic_auth(std::string_view username, + std::string_view password) { basic_auth_username_ = username; basic_auth_password_ = password; } -inline void ClientImpl::set_bearer_token_auth(const std::string &token) { +inline void ClientImpl::set_bearer_token_auth(std::string_view token) { bearer_token_auth_token_ = token; } #ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void ClientImpl::set_digest_auth(const std::string &username, - const std::string &password) { +inline void ClientImpl::set_digest_auth(std::string_view username, + std::string_view password) { digest_auth_username_ = username; digest_auth_password_ = password; } @@ -9297,34 +9303,34 @@ inline void ClientImpl::set_compress(bool on) { compress_ = on; } inline void ClientImpl::set_decompress(bool on) { decompress_ = on; } -inline void ClientImpl::set_interface(const std::string &intf) { +inline void ClientImpl::set_interface(std::string_view intf) { interface_ = intf; } -inline void ClientImpl::set_proxy(const std::string &host, int port) { +inline void ClientImpl::set_proxy(std::string_view host, int port) { proxy_host_ = host; proxy_port_ = port; } -inline void ClientImpl::set_proxy_basic_auth(const std::string &username, - const std::string &password) { +inline void ClientImpl::set_proxy_basic_auth(std::string_view username, + std::string_view password) { proxy_basic_auth_username_ = username; proxy_basic_auth_password_ = password; } -inline void ClientImpl::set_proxy_bearer_token_auth(const std::string &token) { +inline void ClientImpl::set_proxy_bearer_token_auth(std::string_view token) { proxy_bearer_token_auth_token_ = token; } #ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void ClientImpl::set_proxy_digest_auth(const std::string &username, - const std::string &password) { +inline void ClientImpl::set_proxy_digest_auth(std::string_view username, + std::string_view password) { proxy_digest_auth_username_ = username; proxy_digest_auth_password_ = password; } -inline void ClientImpl::set_ca_cert_path(const std::string &ca_cert_file_path, - const std::string &ca_cert_dir_path) { +inline void ClientImpl::set_ca_cert_path(std::string_view ca_cert_file_path, + std::string_view ca_cert_dir_path) { ca_cert_file_path_ = ca_cert_file_path; ca_cert_dir_path_ = ca_cert_dir_path; } @@ -9755,16 +9761,16 @@ inline bool SSLServer::process_and_close_socket(socket_t sock) { } // SSL HTTP client implementation -inline SSLClient::SSLClient(const std::string &host) +inline SSLClient::SSLClient(std::string_view host) : SSLClient(host, 443, std::string(), std::string()) {} -inline SSLClient::SSLClient(const std::string &host, int port) +inline SSLClient::SSLClient(std::string_view host, int port) : SSLClient(host, port, std::string(), std::string()) {} -inline SSLClient::SSLClient(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path, - const std::string &private_key_password) +inline SSLClient::SSLClient(std::string_view host, int port, + std::string_view client_cert_path, + std::string_view client_key_path, + std::string_view private_key_password) : ClientImpl(host, port, client_cert_path, client_key_path) { ctx_ = SSL_CTX_new(TLS_client_method()); @@ -9792,9 +9798,9 @@ inline SSLClient::SSLClient(const std::string &host, int port, } } -inline SSLClient::SSLClient(const std::string &host, int port, +inline SSLClient::SSLClient(std::string_view host, int port, X509 *client_cert, EVP_PKEY *client_key, - const std::string &private_key_password) + std::string_view private_key_password) : ClientImpl(host, port) { ctx_ = SSL_CTX_new(TLS_client_method()); @@ -10203,17 +10209,18 @@ inline bool SSLClient::check_host_name(const char *pattern, #endif // Universal client implementation -inline Client::Client(const std::string &scheme_host_port) +inline Client::Client(std::string_view scheme_host_port) : Client(scheme_host_port, std::string(), std::string()) {} -inline Client::Client(const std::string &scheme_host_port, - const std::string &client_cert_path, - const std::string &client_key_path) { +inline Client::Client(std::string_view scheme_host_port, + std::string_view client_cert_path, + std::string_view client_key_path) { const static std::regex re( R"((?:([a-z]+):\/\/)?(?:\[([a-fA-F\d:]+)\]|([^:/?#]+))(?::(\d+))?)"); std::smatch m; - if (std::regex_match(scheme_host_port, m, re)) { + auto scheme_host_port_string = std::string(scheme_host_port); + if (std::regex_match(scheme_host_port_string, m, re)) { auto scheme = m[1].str(); #ifdef CPPHTTPLIB_OPENSSL_SUPPORT @@ -10256,12 +10263,12 @@ inline Client::Client(const std::string &scheme_host_port, } } // namespace detail -inline Client::Client(const std::string &host, int port) +inline Client::Client(std::string_view host, int port) : cli_(detail::make_unique(host, port)) {} -inline Client::Client(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) +inline Client::Client(std::string_view host, int port, + std::string_view client_cert_path, + std::string_view client_key_path) : cli_(detail::make_unique(host, port, client_cert_path, client_key_path)) {} @@ -10271,83 +10278,83 @@ inline bool Client::is_valid() const { return cli_ != nullptr && cli_->is_valid(); } -inline Result Client::Get(const std::string &path) { return cli_->Get(path); } +inline Result Client::Get(std::string_view path) { return cli_->Get(path); } -inline Result Client::Get(const std::string &path, const Headers &headers) { +inline Result Client::Get(std::string_view path, const Headers &headers) { return cli_->Get(path, headers); } -inline Result Client::Get(const std::string &path, Progress progress) { +inline Result Client::Get(std::string_view path, Progress progress) { return cli_->Get(path, std::move(progress)); } -inline Result Client::Get(const std::string &path, const Headers &headers, +inline Result Client::Get(std::string_view path, const Headers &headers, Progress progress) { return cli_->Get(path, headers, std::move(progress)); } -inline Result Client::Get(const std::string &path, +inline Result Client::Get(std::string_view path, ContentReceiver content_receiver) { return cli_->Get(path, std::move(content_receiver)); } -inline Result Client::Get(const std::string &path, const Headers &headers, +inline Result Client::Get(std::string_view path, const Headers &headers, ContentReceiver content_receiver) { return cli_->Get(path, headers, std::move(content_receiver)); } -inline Result Client::Get(const std::string &path, +inline Result Client::Get(std::string_view path, ContentReceiver content_receiver, Progress progress) { return cli_->Get(path, std::move(content_receiver), std::move(progress)); } -inline Result Client::Get(const std::string &path, const Headers &headers, +inline Result Client::Get(std::string_view path, const Headers &headers, ContentReceiver content_receiver, Progress progress) { return cli_->Get(path, headers, std::move(content_receiver), std::move(progress)); } -inline Result Client::Get(const std::string &path, +inline Result Client::Get(std::string_view path, ResponseHandler response_handler, ContentReceiver content_receiver) { return cli_->Get(path, std::move(response_handler), std::move(content_receiver)); } -inline Result Client::Get(const std::string &path, const Headers &headers, +inline Result Client::Get(std::string_view path, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver) { return cli_->Get(path, headers, std::move(response_handler), std::move(content_receiver)); } -inline Result Client::Get(const std::string &path, +inline Result Client::Get(std::string_view path, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress) { return cli_->Get(path, std::move(response_handler), std::move(content_receiver), std::move(progress)); } -inline Result Client::Get(const std::string &path, const Headers &headers, +inline Result Client::Get(std::string_view path, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress) { return cli_->Get(path, headers, std::move(response_handler), std::move(content_receiver), std::move(progress)); } -inline Result Client::Get(const std::string &path, const Params ¶ms, +inline Result Client::Get(std::string_view path, const Params ¶ms, const Headers &headers, Progress progress) { return cli_->Get(path, params, headers, std::move(progress)); } -inline Result Client::Get(const std::string &path, const Params ¶ms, +inline Result Client::Get(std::string_view path, const Params ¶ms, const Headers &headers, ContentReceiver content_receiver, Progress progress) { return cli_->Get(path, params, headers, std::move(content_receiver), std::move(progress)); } -inline Result Client::Get(const std::string &path, const Params ¶ms, +inline Result Client::Get(std::string_view path, const Params ¶ms, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, Progress progress) { @@ -10355,375 +10362,375 @@ inline Result Client::Get(const std::string &path, const Params ¶ms, std::move(content_receiver), std::move(progress)); } -inline Result Client::Head(const std::string &path) { return cli_->Head(path); } +inline Result Client::Head(std::string_view path) { return cli_->Head(path); } -inline Result Client::Head(const std::string &path, const Headers &headers) { +inline Result Client::Head(std::string_view path, const Headers &headers) { return cli_->Head(path, headers); } -inline Result Client::Post(const std::string &path) { return cli_->Post(path); } +inline Result Client::Post(std::string_view path) { return cli_->Post(path); } -inline Result Client::Post(const std::string &path, const Headers &headers) { +inline Result Client::Post(std::string_view path, const Headers &headers) { return cli_->Post(path, headers); } -inline Result Client::Post(const std::string &path, const char *body, +inline Result Client::Post(std::string_view path, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return cli_->Post(path, body, content_length, content_type); } -inline Result Client::Post(const std::string &path, const Headers &headers, +inline Result Client::Post(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return cli_->Post(path, headers, body, content_length, content_type); } -inline Result Client::Post(const std::string &path, const Headers &headers, +inline Result Client::Post(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, Progress progress) { + std::string_view content_type, Progress progress) { return cli_->Post(path, headers, body, content_length, content_type, progress); } -inline Result Client::Post(const std::string &path, const std::string &body, - const std::string &content_type) { +inline Result Client::Post(std::string_view path, std::string_view body, + std::string_view content_type) { return cli_->Post(path, body, content_type); } -inline Result Client::Post(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress) { +inline Result Client::Post(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress) { return cli_->Post(path, body, content_type, progress); } -inline Result Client::Post(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type) { +inline Result Client::Post(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type) { return cli_->Post(path, headers, body, content_type); } -inline Result Client::Post(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, Progress progress) { +inline Result Client::Post(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type, Progress progress) { return cli_->Post(path, headers, body, content_type, progress); } -inline Result Client::Post(const std::string &path, size_t content_length, +inline Result Client::Post(std::string_view path, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Post(path, content_length, std::move(content_provider), content_type); } -inline Result Client::Post(const std::string &path, +inline Result Client::Post(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Post(path, std::move(content_provider), content_type); } -inline Result Client::Post(const std::string &path, const Headers &headers, +inline Result Client::Post(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Post(path, headers, content_length, std::move(content_provider), content_type); } -inline Result Client::Post(const std::string &path, const Headers &headers, +inline Result Client::Post(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Post(path, headers, std::move(content_provider), content_type); } -inline Result Client::Post(const std::string &path, const Params ¶ms) { +inline Result Client::Post(std::string_view path, const Params ¶ms) { return cli_->Post(path, params); } -inline Result Client::Post(const std::string &path, const Headers &headers, +inline Result Client::Post(std::string_view path, const Headers &headers, const Params ¶ms) { return cli_->Post(path, headers, params); } -inline Result Client::Post(const std::string &path, const Headers &headers, +inline Result Client::Post(std::string_view path, const Headers &headers, const Params ¶ms, Progress progress) { return cli_->Post(path, headers, params, progress); } -inline Result Client::Post(const std::string &path, +inline Result Client::Post(std::string_view path, const MultipartFormDataItems &items) { return cli_->Post(path, items); } -inline Result Client::Post(const std::string &path, const Headers &headers, +inline Result Client::Post(std::string_view path, const Headers &headers, const MultipartFormDataItems &items) { return cli_->Post(path, headers, items); } -inline Result Client::Post(const std::string &path, const Headers &headers, +inline Result Client::Post(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, - const std::string &boundary) { + std::string_view boundary) { return cli_->Post(path, headers, items, boundary); } inline Result -Client::Post(const std::string &path, const Headers &headers, +Client::Post(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, const MultipartFormDataProviderItems &provider_items) { return cli_->Post(path, headers, items, provider_items); } -inline Result Client::Put(const std::string &path) { return cli_->Put(path); } +inline Result Client::Put(std::string_view path) { return cli_->Put(path); } -inline Result Client::Put(const std::string &path, const char *body, +inline Result Client::Put(std::string_view path, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return cli_->Put(path, body, content_length, content_type); } -inline Result Client::Put(const std::string &path, const Headers &headers, +inline Result Client::Put(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return cli_->Put(path, headers, body, content_length, content_type); } -inline Result Client::Put(const std::string &path, const Headers &headers, +inline Result Client::Put(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, Progress progress) { + std::string_view content_type, Progress progress) { return cli_->Put(path, headers, body, content_length, content_type, progress); } -inline Result Client::Put(const std::string &path, const std::string &body, - const std::string &content_type) { +inline Result Client::Put(std::string_view path, std::string_view body, + std::string_view content_type) { return cli_->Put(path, body, content_type); } -inline Result Client::Put(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress) { +inline Result Client::Put(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress) { return cli_->Put(path, body, content_type, progress); } -inline Result Client::Put(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type) { +inline Result Client::Put(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type) { return cli_->Put(path, headers, body, content_type); } -inline Result Client::Put(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, Progress progress) { +inline Result Client::Put(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type, Progress progress) { return cli_->Put(path, headers, body, content_type, progress); } -inline Result Client::Put(const std::string &path, size_t content_length, +inline Result Client::Put(std::string_view path, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Put(path, content_length, std::move(content_provider), content_type); } -inline Result Client::Put(const std::string &path, +inline Result Client::Put(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Put(path, std::move(content_provider), content_type); } -inline Result Client::Put(const std::string &path, const Headers &headers, +inline Result Client::Put(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Put(path, headers, content_length, std::move(content_provider), content_type); } -inline Result Client::Put(const std::string &path, const Headers &headers, +inline Result Client::Put(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Put(path, headers, std::move(content_provider), content_type); } -inline Result Client::Put(const std::string &path, const Params ¶ms) { +inline Result Client::Put(std::string_view path, const Params ¶ms) { return cli_->Put(path, params); } -inline Result Client::Put(const std::string &path, const Headers &headers, +inline Result Client::Put(std::string_view path, const Headers &headers, const Params ¶ms) { return cli_->Put(path, headers, params); } -inline Result Client::Put(const std::string &path, const Headers &headers, +inline Result Client::Put(std::string_view path, const Headers &headers, const Params ¶ms, Progress progress) { return cli_->Put(path, headers, params, progress); } -inline Result Client::Put(const std::string &path, +inline Result Client::Put(std::string_view path, const MultipartFormDataItems &items) { return cli_->Put(path, items); } -inline Result Client::Put(const std::string &path, const Headers &headers, +inline Result Client::Put(std::string_view path, const Headers &headers, const MultipartFormDataItems &items) { return cli_->Put(path, headers, items); } -inline Result Client::Put(const std::string &path, const Headers &headers, +inline Result Client::Put(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, - const std::string &boundary) { + std::string_view boundary) { return cli_->Put(path, headers, items, boundary); } inline Result -Client::Put(const std::string &path, const Headers &headers, +Client::Put(std::string_view path, const Headers &headers, const MultipartFormDataItems &items, const MultipartFormDataProviderItems &provider_items) { return cli_->Put(path, headers, items, provider_items); } -inline Result Client::Patch(const std::string &path) { +inline Result Client::Patch(std::string_view path) { return cli_->Patch(path); } -inline Result Client::Patch(const std::string &path, const char *body, +inline Result Client::Patch(std::string_view path, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return cli_->Patch(path, body, content_length, content_type); } -inline Result Client::Patch(const std::string &path, const char *body, +inline Result Client::Patch(std::string_view path, const char *body, size_t content_length, - const std::string &content_type, + std::string_view content_type, Progress progress) { return cli_->Patch(path, body, content_length, content_type, progress); } -inline Result Client::Patch(const std::string &path, const Headers &headers, +inline Result Client::Patch(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return cli_->Patch(path, headers, body, content_length, content_type); } -inline Result Client::Patch(const std::string &path, const Headers &headers, +inline Result Client::Patch(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, + std::string_view content_type, Progress progress) { return cli_->Patch(path, headers, body, content_length, content_type, progress); } -inline Result Client::Patch(const std::string &path, const std::string &body, - const std::string &content_type) { +inline Result Client::Patch(std::string_view path, std::string_view body, + std::string_view content_type) { return cli_->Patch(path, body, content_type); } -inline Result Client::Patch(const std::string &path, const std::string &body, - const std::string &content_type, +inline Result Client::Patch(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress) { return cli_->Patch(path, body, content_type, progress); } -inline Result Client::Patch(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type) { +inline Result Client::Patch(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type) { return cli_->Patch(path, headers, body, content_type); } -inline Result Client::Patch(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, +inline Result Client::Patch(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type, Progress progress) { return cli_->Patch(path, headers, body, content_type, progress); } -inline Result Client::Patch(const std::string &path, size_t content_length, +inline Result Client::Patch(std::string_view path, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Patch(path, content_length, std::move(content_provider), content_type); } -inline Result Client::Patch(const std::string &path, +inline Result Client::Patch(std::string_view path, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Patch(path, std::move(content_provider), content_type); } -inline Result Client::Patch(const std::string &path, const Headers &headers, +inline Result Client::Patch(std::string_view path, const Headers &headers, size_t content_length, ContentProvider content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Patch(path, headers, content_length, std::move(content_provider), content_type); } -inline Result Client::Patch(const std::string &path, const Headers &headers, +inline Result Client::Patch(std::string_view path, const Headers &headers, ContentProviderWithoutLength content_provider, - const std::string &content_type) { + std::string_view content_type) { return cli_->Patch(path, headers, std::move(content_provider), content_type); } -inline Result Client::Delete(const std::string &path) { +inline Result Client::Delete(std::string_view path) { return cli_->Delete(path); } -inline Result Client::Delete(const std::string &path, const Headers &headers) { +inline Result Client::Delete(std::string_view path, const Headers &headers) { return cli_->Delete(path, headers); } -inline Result Client::Delete(const std::string &path, const char *body, +inline Result Client::Delete(std::string_view path, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return cli_->Delete(path, body, content_length, content_type); } -inline Result Client::Delete(const std::string &path, const char *body, +inline Result Client::Delete(std::string_view path, const char *body, size_t content_length, - const std::string &content_type, + std::string_view content_type, Progress progress) { return cli_->Delete(path, body, content_length, content_type, progress); } -inline Result Client::Delete(const std::string &path, const Headers &headers, +inline Result Client::Delete(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type) { + std::string_view content_type) { return cli_->Delete(path, headers, body, content_length, content_type); } -inline Result Client::Delete(const std::string &path, const Headers &headers, +inline Result Client::Delete(std::string_view path, const Headers &headers, const char *body, size_t content_length, - const std::string &content_type, + std::string_view content_type, Progress progress) { return cli_->Delete(path, headers, body, content_length, content_type, progress); } -inline Result Client::Delete(const std::string &path, const std::string &body, - const std::string &content_type) { +inline Result Client::Delete(std::string_view path, std::string_view body, + std::string_view content_type) { return cli_->Delete(path, body, content_type); } -inline Result Client::Delete(const std::string &path, const std::string &body, - const std::string &content_type, +inline Result Client::Delete(std::string_view path, std::string_view body, + std::string_view content_type, Progress progress) { return cli_->Delete(path, body, content_type, progress); } -inline Result Client::Delete(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type) { +inline Result Client::Delete(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type) { return cli_->Delete(path, headers, body, content_type); } -inline Result Client::Delete(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, +inline Result Client::Delete(std::string_view path, const Headers &headers, + std::string_view body, + std::string_view content_type, Progress progress) { return cli_->Delete(path, headers, body, content_type, progress); } -inline Result Client::Options(const std::string &path) { +inline Result Client::Options(std::string_view path) { return cli_->Options(path); } -inline Result Client::Options(const std::string &path, const Headers &headers) { +inline Result Client::Options(std::string_view path, const Headers &headers) { return cli_->Options(path, headers); } @@ -10779,17 +10786,17 @@ inline void Client::set_write_timeout(time_t sec, time_t usec) { cli_->set_write_timeout(sec, usec); } -inline void Client::set_basic_auth(const std::string &username, - const std::string &password) { +inline void Client::set_basic_auth(std::string_view username, + std::string_view password) { cli_->set_basic_auth(username, password); } -inline void Client::set_bearer_token_auth(const std::string &token) { +inline void Client::set_bearer_token_auth(std::string_view token) { cli_->set_bearer_token_auth(token); } #ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_digest_auth(const std::string &username, - const std::string &password) { +inline void Client::set_digest_auth(std::string_view username, + std::string_view password) { cli_->set_digest_auth(username, password); } #endif @@ -10806,25 +10813,25 @@ inline void Client::set_compress(bool on) { cli_->set_compress(on); } inline void Client::set_decompress(bool on) { cli_->set_decompress(on); } -inline void Client::set_interface(const std::string &intf) { +inline void Client::set_interface(std::string_view intf) { cli_->set_interface(intf); } -inline void Client::set_proxy(const std::string &host, int port) { +inline void Client::set_proxy(std::string_view host, int port) { cli_->set_proxy(host, port); } -inline void Client::set_proxy_basic_auth(const std::string &username, - const std::string &password) { +inline void Client::set_proxy_basic_auth(std::string_view username, + std::string_view password) { cli_->set_proxy_basic_auth(username, password); } -inline void Client::set_proxy_bearer_token_auth(const std::string &token) { +inline void Client::set_proxy_bearer_token_auth(std::string_view token) { cli_->set_proxy_bearer_token_auth(token); } #ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_proxy_digest_auth(const std::string &username, - const std::string &password) { +inline void Client::set_proxy_digest_auth(std::string_view username, + std::string_view password) { cli_->set_proxy_digest_auth(username, password); } #endif @@ -10849,8 +10856,8 @@ inline void Client::set_logger(Logger logger) { } #ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_ca_cert_path(const std::string &ca_cert_file_path, - const std::string &ca_cert_dir_path) { +inline void Client::set_ca_cert_path(std::string_view ca_cert_file_path, + std::string_view ca_cert_dir_path) { cli_->set_ca_cert_path(ca_cert_file_path, ca_cert_dir_path); } diff --git a/module/crc_check.cpp b/module/crc_check.cpp index dc8489e..e02ec4c 100644 --- a/module/crc_check.cpp +++ b/module/crc_check.cpp @@ -4,13 +4,14 @@ #include #include #include +#include using namespace Psc; int max_distance = 700; namespace fs = std::filesystem; class MY_File_Data_Source : public File_Data_Source { public: BaseLogger *logger{}; - void pre_handle(const std::string &data) override {} + void pre_handle(std::string_view data) override {} void handle_mode_s(std::string &packet) override {} size_t line_num = 0; size_t line_num_ex = 0; @@ -42,7 +43,7 @@ public: std::cout << "first:" << mem2hex(packet) << std::endl; return; } - std::string error_len = + std::string_view error_len = key + " " + LOG_POS_SIMPLE + " mode_s_error_length"; auto type = packet[1]; if (type == Msg::AC) { @@ -137,7 +138,7 @@ void handle(const fs::path &file_path, const fs::path &rel_path) { Mode_S::parse_call_back = [&](Mode_S::Parse_Call_Back_Type type, Aircraft_Info *aircraft_info, - const std::string &field_name_or_error_info, + std::string_view field_name_or_error_info, std::vector bds_list, void *cur_parser, Mode_S::P_S mode_s_msg) { if (type == Mode_S::Parse_Call_Back_Type::Normal_Block) @@ -200,7 +201,7 @@ void list_directory(const fs::path &dir_path, const fs::path &base_path) { } } } -std::wstring _transformString2Wstring(const std::string &s) { +std::wstring _transformString2Wstring(std::string_view s) { setlocale(LC_CTYPE, "en_US.UTF-8"); const char *_Source = s.c_str(); size_t len = strlen(_Source) + 1; @@ -211,7 +212,7 @@ std::wstring _transformString2Wstring(const std::string &s) { delete[] wStr; return result; } -std::wstring gbk_to_wstring(const std::string &gbk) { +std::wstring gbk_to_wstring(std::string_view gbk) { int len = MultiByteToWideChar(CP_ACP, 0, gbk.c_str(), -1, nullptr, 0); std::wstring wstr(len, L'\0'); MultiByteToWideChar(CP_ACP, 0, gbk.c_str(), -1, &wstr[0], len); diff --git a/module/dll_source/main.cpp b/module/dll_source/main.cpp index 2409921..ba771fc 100644 --- a/module/dll_source/main.cpp +++ b/module/dll_source/main.cpp @@ -21,6 +21,7 @@ #include "Core/Base/SM_RingBuffer.h" #include "Dll_Global.h" +#include std::vector ddd = { @@ -53,7 +54,7 @@ std::string get_absb() { class TextLineReader { public: - explicit TextLineReader(const std::string& file_path) { + explicit TextLineReader(std::string_view file_path) { load(file_path); } @@ -86,10 +87,10 @@ public: } private: - void load(const std::string& file_path) { - std::ifstream file(file_path); + void load(std::string_view file_path) { + std::ifstream file{std::string(file_path)}; if (!file.is_open()) { - throw std::runtime_error("Failed to open file: " + file_path); + throw std::runtime_error("Failed to open file: " + std::string(file_path)); } std::string line; diff --git a/module/dll_source_lzy/114/out/lib/device_uhd_c.cpp b/module/dll_source_lzy/114/out/lib/device_uhd_c.cpp index 197ad2f..3064437 100644 --- a/module/dll_source_lzy/114/out/lib/device_uhd_c.cpp +++ b/module/dll_source_lzy/114/out/lib/device_uhd_c.cpp @@ -19,6 +19,7 @@ #include #include #include +#include using namespace std; rx_data_cbk_t s_cbk; @@ -1552,7 +1553,7 @@ struct Global_Read_Buffer { std::swap(ret, buffer); return ret; } - void append(std::string buf) { + void append(std::string_view buf) { std::lock_guard g(mtx); buffer.append(buf); } diff --git a/module/dll_source_lzy/114/out/lib/hulc/Bit.cpp b/module/dll_source_lzy/114/out/lib/hulc/Bit.cpp index d283512..49ee6d7 100644 --- a/module/dll_source_lzy/114/out/lib/hulc/Bit.cpp +++ b/module/dll_source_lzy/114/out/lib/hulc/Bit.cpp @@ -4,6 +4,7 @@ #include #include #include +#include // 2025-01-02 05:01:50 [info] 1a480118 9607f81e f020 3a24 67761dbd 1a9ecbf8 // 5655c75b 00601307 #include @@ -95,8 +96,8 @@ const bool is_big_endian = []() { auto *p = reinterpret_cast(&x); return p[0] == 0x01; // 如果 p[0] 为 0x01,说明是大端字节序 }(); -std::vector split(const std::string &str, - const std::string &delimiter) { +std::vector split(std::string_view str, + std::string_view delimiter) { std::vector tokens; size_t start = 0; size_t end = str.find(delimiter); @@ -110,7 +111,7 @@ std::vector split(const std::string &str, tokens.push_back(str.substr(start)); // Add the last token return tokens; } -std::string bin2mem(const std::string &bin) { +std::string bin2mem(std::string_view bin) { const size_t len = bin.size(); if (len % 8 != 0) { throw std::invalid_argument("binary string length must be a multiple of 8"); @@ -395,7 +396,7 @@ TEST(Bi222, xor_hex_Ex) { #endif // 将字节序从大端转换到当前平台字节序,并复制到目标内存中 -void big_endian_2_platform(const std::string &big_endian, char *dest) { +void big_endian_2_platform(std::string_view big_endian, char *dest) { // 先复制原始数据 std::string result = big_endian; // 如果当前平台是小端,反转数据 @@ -405,14 +406,14 @@ void big_endian_2_platform(const std::string &big_endian, char *dest) { // 将转换后的数据拷贝到目标内存中 std::memcpy(dest, result.data(), result.size()); } -std::string big_endian_2_platform(const std::string &big_endian) { +std::string big_endian_2_platform(std::string_view big_endian) { std::string result; result.resize(big_endian.size()); big_endian_2_platform(big_endian, result.data()); return result; } // 将字节序从小端转换到当前平台字节序,并复制到目标内存中 -void little_endian_2_platform(const std::string &little_endian, char *dest) { +void little_endian_2_platform(std::string_view little_endian, char *dest) { // 先复制原始数据 std::string result = little_endian; // 如果当前平台是大端,反转数据 @@ -422,7 +423,7 @@ void little_endian_2_platform(const std::string &little_endian, char *dest) { // 将转换后的数据拷贝到目标内存中 std::memcpy(dest, result.data(), result.size()); } -std::string little_endian_2_platform(const std::string &little_endian) { +std::string little_endian_2_platform(std::string_view little_endian) { std::string result; result.resize(little_endian.size()); big_endian_2_platform(little_endian, result.data()); diff --git a/module/dll_source_lzy/114/out/lib/hulc/Bit.h b/module/dll_source_lzy/114/out/lib/hulc/Bit.h index 81d2c5d..9eaab26 100644 --- a/module/dll_source_lzy/114/out/lib/hulc/Bit.h +++ b/module/dll_source_lzy/114/out/lib/hulc/Bit.h @@ -1,6 +1,7 @@ #ifndef BitSet_H #define BitSet_H #include +#include #ifdef __linux__ #include #endif @@ -70,11 +71,11 @@ extern const bool is_big_endian; void big_endian_2_platform(void *dest, const char *d, size_t size); void little_endian_2_platform(void *dest, const char *d, size_t size); -void big_endian_2_platform(const std::string &big_endian, char *dest); -void little_endian_2_platform(const std::string &little_endian, char *dest); +void big_endian_2_platform(std::string_view big_endian, char *dest); +void little_endian_2_platform(std::string_view little_endian, char *dest); -std::string big_endian_2_platform(const std::string &big_endian); -std::string little_endian_2_platform(const std::string &little_endian); +std::string big_endian_2_platform(std::string_view big_endian); +std::string little_endian_2_platform(std::string_view little_endian); std::string platform_2_big_endian(void *memory, int size); std::string platform_2_little_endian(void *memory, int size); @@ -180,7 +181,7 @@ void mem2hex_Ex2(void *dest, void *mem, size_t num, bool uppercase, const char *middle, size_t middle_len = std::numeric_limits::max()); Base STR_Type mem2hex(const STR_Type &mem, bool uppercase = true, - const std::string &middle = "", + std::string_view middle = "", std::pmr::memory_resource *resource = nullptr) { auto size = cacl_type::size(mem); auto ret = @@ -209,7 +210,7 @@ template Enum get_bin(std::string &msg) { return static_cast( std::bitset(msg.substr(start, len)).to_ullong()); } -template int get_bin(const std::string &msg) { +template int get_bin(std::string_view msg) { return std::bitset(msg.substr(start, len)).to_ullong(); } template @@ -217,7 +218,7 @@ void set_bin(std::string &msg, unsigned long long n) { msg.replace(start, len, std::bitset(n).to_string()); } template -void set_bin(std::string &msg, const std::string &value) { +void set_bin(std::string &msg, std::string_view value) { if (value.size() != len) { std::cout << "len == " << len << " bits.size() == " << value.size() << std::endl; @@ -231,13 +232,13 @@ template std::string to_bin(unsigned long long n) { template std::string to_bin(double n) { return std::bitset(static_cast(n)).to_string(); } -template T bin2(const std::string &binstr) { +template T bin2(std::string_view binstr) { return std::stoull(binstr, nullptr, 2); } -template unsigned long long hex2(const std::string &hexstr) { +template unsigned long long hex2(std::string_view hexstr) { return std::stoull(hexstr, nullptr, 16); } -template <> inline int bin2(const std::string &binstr) { +template <> inline int bin2(std::string_view binstr) { int bit_limit = sizeof(int) * 8; if (binstr.size() > bit_limit) { std::cout << "Bitset.h inline int bin2 error! Binary string exceeds " diff --git a/module/dll_source_lzy/114/out/lib/hulc/DataOutputFormats.cpp b/module/dll_source_lzy/114/out/lib/hulc/DataOutputFormats.cpp index 034ef72..12cb532 100644 --- a/module/dll_source_lzy/114/out/lib/hulc/DataOutputFormats.cpp +++ b/module/dll_source_lzy/114/out/lib/hulc/DataOutputFormats.cpp @@ -2,6 +2,7 @@ #include #include +#include using namespace yC; @@ -22,7 +23,7 @@ MLAT_timestamp::MLAT_timestamp() { parse_hhmmss(); } -MLAT_timestamp::MLAT_timestamp(const std::string &memory_6) : memory(memory_6) { +MLAT_timestamp::MLAT_timestamp(std::string_view memory_6) : memory(memory_6) { assert(memory_6.size() == 6); auto msg_bin = hex2bin(mem2hex(memory)); daysec = std::bitset<18>(msg_bin.substr(0, 18)).to_ulong(); @@ -55,7 +56,7 @@ void MLAT_timestamp::parse_hhmmss() { mm = (daysec / 60) % 60; ss = daysec % 60; } -std::string packet_to_escape_format(std::string t) { +std::string packet_to_escape_format(std::string_view t) { std::string result = "\x1a"; for (size_t i = 1; i < t.size(); ++i) { result.push_back(t[i]); // 插入当前字符 @@ -66,7 +67,7 @@ std::string packet_to_escape_format(std::string t) { return result; } void Binary_Format_handle_buffer( - std::string &buffer, const std::string &data, + std::string &buffer, std::string_view data, const std::function &callback) { size_t i = 0; while (i < data.size()) { @@ -99,7 +100,7 @@ void Binary_Format_handle_buffer( // 9 + 7 // 9 + 14 std::string mode_s_msg_packet_to_server_packet(std::uint32_t id, - std::string packet) { + std::string_view packet) { std::string id_code = yC::platform_2_big_endian((char *)&id, sizeof(id)); // assert(id_code.size() == 4, "id.size != 4"); packet.insert(1, id_code.c_str(), 4); diff --git a/module/dll_source_lzy/114/out/lib/hulc/DataOutputFormats.h b/module/dll_source_lzy/114/out/lib/hulc/DataOutputFormats.h index 047dd11..21c0c4d 100644 --- a/module/dll_source_lzy/114/out/lib/hulc/DataOutputFormats.h +++ b/module/dll_source_lzy/114/out/lib/hulc/DataOutputFormats.h @@ -1,13 +1,14 @@ #ifndef DATAOUTPUTFORMATS_H #define DATAOUTPUTFORMATS_H #include "base_format.h" +#include using namespace yC; // AVR format // *02E99619FACDAE; // *8D3C5EE69901BD9540078D37335F; // *7700; -inline std::string create_AVR_format(const std::string &msg_hex) { +inline std::string create_AVR_format(std::string_view msg_hex) { return "*" + msg_hex + ";"; } @@ -16,7 +17,7 @@ inline std::string create_AVR_format(const std::string &msg_hex) { // @016CE3671C747700; // @5500068BA46CB402c18d34fc8000; -inline std::string create_MLAT_AVR_format(const std::string &msg_hex, +inline std::string create_MLAT_AVR_format(std::string_view msg_hex, MLAT_timestamp *timestamp) { // std::string signal_level_str = // bin2hex(std::bitset<8>(signal_level).to_string()); std::cout << "signal:" @@ -32,7 +33,7 @@ inline std::string create_MLAT_AVR_format(const std::string &msg_hex, // configuration settings, time stamp error ticks as int8_t (1 tick is 15ns) // (message "4" not on Mode-S Beast classic) : true 0x1a is // 0x1a, and "1", "2" and "3" are 0x31, 0x32 and 0x33 -inline std::string create_Binary_Format_memory(const std::string &msg_hex, +inline std::string create_Binary_Format_memory(std::string_view msg_hex, char signal_level, MLAT_timestamp *timestamp) { std::string type; @@ -72,9 +73,9 @@ inline std::string create_Binary_Format_memory(const std::string &msg_hex, } // 把要传递的信息转化成转义字符 二进制==>转义二进制 -std::string packet_to_escape_format(std::string t); +std::string packet_to_escape_format(std::string_view t); -inline std::string unescape_packet(std::string t) { +inline std::string unescape_packet(std::string_view t) { std::string result; for (size_t i = 0; i < t.size(); ++i) { if (t[i] == '\x1a' && i + 1 < t.size() && t[i + 1] == '\x1a') { @@ -117,7 +118,7 @@ inline std::string create_Binary_Format_4(MLAT_timestamp timestamp, struct TCXO_Clock { unsigned long long times; - explicit TCXO_Clock(const std::string &hex) { + explicit TCXO_Clock(std::string_view hex) { times = std::bitset<48>(hex2bin(hex)).to_ullong(); } @@ -325,7 +326,7 @@ struct HULC_Status_Message : HULC_Message { return ret; } - static double decodeLatitudeFromBAM(const std::string &bigdian4) { + static double decodeLatitudeFromBAM(std::string_view bigdian4) { std::uint32_t value; yC::big_endian_2_platform(bigdian4, (char *)&value); // BAM 格式解码公式 @@ -349,18 +350,18 @@ struct HULC_Status_Message : HULC_Message { } }; -static void hulc_big_endian_set(const std::string &msg, void *field, int start, +static void hulc_big_endian_set(std::string_view msg, void *field, int start, int len) { auto str = msg.substr(start, len); yC::big_endian_2_platform(str, (char *)field); } -static void hulc_set2(const std::string &msg, void *field, int start, int len) { +static void hulc_set2(std::string_view msg, void *field, int start, int len) { auto it = msg.substr(start, len); std::memcpy(field, it.data(), len); } // msg 是文本二进制字符串 转义后的 1a34 -static HULC_Status_Message create_HULC_Status_Message(const std::string &msg) { +static HULC_Status_Message create_HULC_Status_Message(std::string_view msg) { HULC_Status_Message ret{}; hulc_big_endian_set(msg, &ret.SerNum, 4, 4); hulc_big_endian_set(msg, &ret.Flags, 8, 2); @@ -380,9 +381,9 @@ struct HULC_Reply_to_command : HULC_Message { }; // 0x1A 0x48 0x01 0x18 SerNum Flags I.U. xTime Lat Lon Alt Sat HDOP -inline std::uint8_t get_id(const std::string &msg) { return msg[2]; } +inline std::uint8_t get_id(std::string_view msg) { return msg[2]; } -inline std::uint8_t get_len(const std::string &msg) { return msg[3]; } +inline std::uint8_t get_len(std::string_view msg) { return msg[3]; } // Type Payload Size Description // 0x31 4 bytes Mode-A/C raw data @@ -400,7 +401,7 @@ inline std::uint8_t get_len(const std::string &msg) { return msg[3]; } // During Transmission: 1A 32 27 1A 1A E8 57 F0 1A 1A 6C // After Un-Escaping: 1A 32 27 1A E8 57 F0 1A 6C void Binary_Format_handle_buffer( - std::string &buffer, const std::string &data, + std::string &buffer, std::string_view data, const std::function &callback); /* Command Message (Host ==> Device) The command-message has a simple ASCII based structure. Each message starts with @@ -414,7 +415,7 @@ in the respective protocol section. */ std::string mode_s_msg_packet_to_server_packet(std::uint32_t id, - std::string packet); + std::string_view packet); // 1a34 radarcape 状态帧消息 // https://wiki.jetvision.de/wiki/Radarcape:Version_History#Status_Frame_0x34_contents_were_extended_with_GPS_and_UTC_information @@ -532,7 +533,7 @@ struct Radarcape_STATUS_Message { // 消息5字节 // static Radarcape_STATUS_Message -create_Radarcape_STATUS_Message(const std::string &msg_5) { +create_Radarcape_STATUS_Message(std::string_view msg_5) { std::string msg = yC::big_endian_2_platform(msg_5.substr(2)); Radarcape_STATUS_Message ret{}; std::memcpy(&ret, (void *)(msg.data()), 3); diff --git a/module/dll_source_lzy/114/out/lib/hulc/Json.cpp b/module/dll_source_lzy/114/out/lib/hulc/Json.cpp index 8949c43..044caf7 100644 --- a/module/dll_source_lzy/114/out/lib/hulc/Json.cpp +++ b/module/dll_source_lzy/114/out/lib/hulc/Json.cpp @@ -3,7 +3,8 @@ #include "Json.h" #include #include -std::function Json::handle_error = [](const char* function_name, const std::string& reason, const char* file, int line) { +#include +std::function Json::handle_error = [](const char* function_name, std::string_view reason, const char* file, int line) { std::ostringstream oss; oss << "Json::" << function_name << " 原因:" << reason << std::endl; oss << "位置:" << file << ":" << line << std::endl; @@ -28,7 +29,7 @@ Json::operator std::string() const { return const_cast(this)->to_json_string(); } -std::string Json::get_string(const std::string& key) const { +std::string Json::get_string(std::string_view key) const { const Json* that = get(key); if (!that) { HANDLE_ERROR(key + " not found! " + to_json_string()) @@ -44,7 +45,7 @@ bool Json::bool_val() const { return (val == "true"); } -const std::string& Json::get_inside_string(const std::string& key) const { +const std::string& Json::get_inside_string(std::string_view key) const { const Json* that = get(key); if (!that) { HANDLE_ERROR(key + " not found!") @@ -53,16 +54,16 @@ const std::string& Json::get_inside_string(const std::string& key) const { return that->val; } -Json::Json(std::string key, const char* val) : key(std::move(key)), val(std::string(val)), valueType(String) { +Json::Json(std::string_view key, const char* val) : key(std::move(key)), val(std::string(val)), valueType(String) { } -Json::Json(std::string key, std::string val) : key(std::move(key)), val(std::move(val)), valueType(String) { +Json::Json(std::string_view key, std::string_view val) : key(std::move(key)), val(std::move(val)), valueType(String) { } -Json::Json(std::string key, bool val) : key(std::move(key)), val(val ? "true" : "false"), valueType(Bool) { +Json::Json(std::string_view key, bool val) : key(std::move(key)), val(val ? "true" : "false"), valueType(Bool) { } -Json::Json(std::string key, const Json& children) : +Json::Json(std::string_view key, const Json& children) : key(std::move(key)), val(children.val), valueType(children.valueType), children(children.children) {} @@ -102,7 +103,7 @@ void Json::prepend(const Json& json) { Json::Json(const char* val) : val(std::string(val)), valueType(String) { } -Json::Json(std::string val) : val(std::move(val)), valueType(String) { +Json::Json(std::string_view val) : val(std::move(val)), valueType(String) { } Json::Json(const int& val) : val(std::to_string(val)), valueType(Number) { @@ -114,7 +115,7 @@ Json::Json(const double& val) : val(std::to_string(val)), valueType(Number) { Json::Json(const bool& val) : val(val ? "true" : "false"), valueType(Bool) { } -const Json* Json::get(const std::string& key) const { +const Json* Json::get(std::string_view key) const { for (const Json& child : children) { if (child.key == key) { return &child; @@ -132,7 +133,7 @@ Json Json::object(const std::vector& children) { return object("", children); } -Json Json::array(std::string key, const std::vector& children) { +Json Json::array(std::string_view key, const std::vector& children) { Json ret; ret.key = std::move(key); ret.valueType = Array; @@ -140,7 +141,7 @@ Json Json::array(std::string key, const std::vector& children) { return ret; } -Json Json::object(std::string key, const std::vector& children) { +Json Json::object(std::string_view key, const std::vector& children) { Json ret; ret.key = std::move(key); ret.valueType = Object; @@ -148,7 +149,7 @@ Json Json::object(std::string key, const std::vector& children) { return ret; } -std::string Json::get_indent(const int& indent, const std::string& indentStr) { +std::string Json::get_indent(const int& indent, std::string_view indentStr) { std::string ret; for (int i = 0; i < indent; ++i) { ret.append(indentStr); @@ -156,8 +157,8 @@ std::string Json::get_indent(const int& indent, const std::string& indentStr) { return ret; } -void Json::append_value_string(std::string& ret, const int& indent, bool isEnd, const std::string& object_split, - const std::string& array_split, const std::string& indentStr, JsonType fatherType) const { +void Json::append_value_string(std::string& ret, const int& indent, bool isEnd, std::string_view object_split, + std::string_view array_split, std::string_view indentStr, JsonType fatherType) const { ret.append(get_indent(indent, indentStr)); if (fatherType == Object) ret.append("\"" + key + "\"" + ": "); const std::string split = fatherType == Array ? array_split : object_split; @@ -215,8 +216,8 @@ void handleBlank(std::string& s) { } } -std::string Json::to_json_string(const std::string& object_split, const std::string& array_split, - const std::string& indentStr, const int& indent) const { +std::string Json::to_json_string(std::string_view object_split, std::string_view array_split, + std::string_view indentStr, const int& indent) const { if (valueType == Bool) return val; if (valueType == String) return '\"' + val + '\"'; if (valueType == Number) return val; @@ -235,7 +236,7 @@ std::string Json::to_json_string(const std::string& object_split, const std::str Json::Json(std::nullptr_t) : valueType(Null), val("null") { } -Json::Json(std::string key, std::nullptr_t) : key(std::move(key)), valueType(Null), val("null") { +Json::Json(std::string_view key, std::nullptr_t) : key(std::move(key)), valueType(Null), val("null") { } Json::Json() = default; @@ -283,7 +284,7 @@ std::string parse_number(std::string& s, size_t& i) { std::optional parse_json_EX(std::string& s, size_t& i); -std::optional parse_json(const std::string& s) { +std::optional parse_json(std::string_view s) { auto& t = const_cast(s); size_t i = 0; return parse_json_EX(t, i); @@ -396,7 +397,7 @@ std::optional parse_array(std::string& s, size_t& i) { return ret; } std::optional parse_json_file(std::string& fileName) { - static auto readFile = [](const std::string& path) -> std::string { + static auto readFile = [](std::string_view path) -> std::string { std::ifstream infile(path, std::ios::binary | std::ios::ate); if (!infile.is_open()) { HANDLE_ERROR("找不到文件路径!" + path) diff --git a/module/dll_source_lzy/114/out/lib/hulc/Json.h b/module/dll_source_lzy/114/out/lib/hulc/Json.h index 153415c..b620a7c 100644 --- a/module/dll_source_lzy/114/out/lib/hulc/Json.h +++ b/module/dll_source_lzy/114/out/lib/hulc/Json.h @@ -7,8 +7,9 @@ #include #include #include +#include #define Json_GET(type, name) \ - [[nodiscard]] type get_##name(const std::string &key) const { \ + [[nodiscard]] type get_##name(std::string_view key) const { \ const Json *that = get(key); \ if (!that) { \ std::cout << "get" #type " error json not found! key:" << key \ @@ -18,7 +19,7 @@ return that->name##_val(); \ } -template T_Number to_number(const std::string &val) { +template T_Number to_number(std::string_view val) { if constexpr (std::is_integral::value) { if constexpr (std::is_unsigned::value) { return static_cast(std::stoull(val)); @@ -33,25 +34,25 @@ template T_Number to_number(const std::string &val) { class Json { public: - static std::function handle_error; explicit operator std::string() const; friend std::ostream &operator<<(std::ostream &os, const Json &obj); - [[nodiscard]] const Json *get(const std::string &key) const; - [[nodiscard]] std::string get_string(const std::string &key) const; + [[nodiscard]] const Json *get(std::string_view key) const; + [[nodiscard]] std::string get_string(std::string_view key) const; [[nodiscard]] const std::string & - get_inside_string(const std::string &key) const; + get_inside_string(std::string_view key) const; // 键值对 - Json(std::string key, const char *charArrayVal); - Json(std::string key, std::nullptr_t); - Json(std::string key, std::string stringVal); - Json(std::string key, bool boolVal); - Json(std::string key, const Json &body); + Json(std::string_view key, const char *charArrayVal); + Json(std::string_view key, std::nullptr_t); + Json(std::string_view key, std::string_view stringVal); + Json(std::string_view key, bool boolVal); + Json(std::string_view key, const Json &body); [[nodiscard]] bool bool_val() const; Json_GET(bool, bool) template - T_Number get_number(const std::string &key) const { + T_Number get_number(std::string_view key) const { const Json *that = get(key); if (!that) { std::cout << "json not found! key:" << key @@ -70,7 +71,7 @@ public: // } template - Json(std::string key, const T_Number &intVal, + Json(std::string_view key, const T_Number &intVal, typename std::enable_if< !std::is_same::value && !std::is_same>::value>::type * = nullptr) @@ -79,14 +80,14 @@ public: void append_list(const std::vector &arr); void append(const Json &json); void prepend(const Json &json); - static Json array(std::string key, const std::vector &arr); - static Json object(std::string key, const std::vector &children); + static Json array(std::string_view key, const std::vector &arr); + static Json object(std::string_view key, const std::vector &children); static Json array(const std::vector &arr = {}); static Json object(const std::vector &children = {}); // 不加explicit 让他允许隐式类型转换 Json(std::nullptr_t); // 只能填写 nullptr Json(const char *charArrayVal); - Json(std::string stringVal); + Json(std::string_view stringVal); Json(const int &intVal); Json(const double &doubleVal); Json(const bool &boolVal); @@ -96,23 +97,23 @@ public: std::string key, val; std::vector children; [[nodiscard]] std::string - to_json_string(const std::string &object_split = "\n", - const std::string &array_split = "\n", - const std::string &indentStr = " ", + to_json_string(std::string_view object_split = "\n", + std::string_view array_split = "\n", + std::string_view indentStr = " ", const int &indent = 0) const; Json(); private: static std::string get_indent(const int &indent, - const std::string &indentStr); + std::string_view indentStr); void append_value_string(std::string &ret, const int &indent, bool isEnd, - const std::string &object_split, - const std::string &array_split, - const std::string &indentStr, + std::string_view object_split, + std::string_view array_split, + std::string_view indentStr, JsonType fatherType) const; }; -std::optional parse_json(const std::string &s); +std::optional parse_json(std::string_view s); std::optional parse_json_file(std::string &fileName); std::optional parse_json_file(std::string &&fileName); diff --git a/module/dll_source_lzy/114/out/lib/hulc/base_format.h b/module/dll_source_lzy/114/out/lib/hulc/base_format.h index 0fb0a14..c6a5078 100644 --- a/module/dll_source_lzy/114/out/lib/hulc/base_format.h +++ b/module/dll_source_lzy/114/out/lib/hulc/base_format.h @@ -22,11 +22,12 @@ #include #include #include +#include // 1纳秒是 10 -9次方秒 struct MLAT_timestamp { explicit MLAT_timestamp(); - explicit MLAT_timestamp(const std::string &memory_6); + explicit MLAT_timestamp(std::string_view memory_6); MLAT_timestamp(std::uint32_t daysec, std::uint32_t nanosec); std::uint32_t daysec{}; // 当天的秒数 高18位 std::uint32_t nanosec{}; // 当天的纳秒数 低30位 diff --git a/module/dll_source_lzy/114/out/lib/hulc/magic_enum/export.h b/module/dll_source_lzy/114/out/lib/hulc/magic_enum/export.h index 8bbb1ed..7393340 100644 --- a/module/dll_source_lzy/114/out/lib/hulc/magic_enum/export.h +++ b/module/dll_source_lzy/114/out/lib/hulc/magic_enum/export.h @@ -3,8 +3,9 @@ #include "magic_enum/magic_enum.hpp" #include #include +#include -template EnumType to_enum(const std::string &str) { +template EnumType to_enum(std::string_view str) { auto opt = magic_enum::enum_cast(str); if (opt.has_value()) { return opt.value(); // 返回枚举值 @@ -15,7 +16,7 @@ template EnumType to_enum(const std::string &str) { } template -std::optional to_enum2(const std::string &str) { +std::optional to_enum2(std::string_view str) { auto opt = magic_enum::enum_cast(str); if (opt.has_value()) { return opt.value(); // 返回枚举值 @@ -65,7 +66,7 @@ template std::vector split_flags(Enum flags) { inline std::string to_string(const char *val) { return std::string(val); } -template <> inline std::string to_string(std::string val) { return val; } +template <> inline std::string to_string(std::string_view val) { return val; } template <> inline std::string to_string(bool val) { return val ? "true" : "false"; } diff --git a/module/dll_source_lzy/114/out/lib/hulc/magic_enum/magic_enum/magic_enum_format.hpp b/module/dll_source_lzy/114/out/lib/hulc/magic_enum/magic_enum/magic_enum_format.hpp index 392be5d..11b55a2 100644 --- a/module/dll_source_lzy/114/out/lib/hulc/magic_enum/magic_enum/magic_enum_format.hpp +++ b/module/dll_source_lzy/114/out/lib/hulc/magic_enum/magic_enum/magic_enum_format.hpp @@ -34,6 +34,7 @@ #include "magic_enum.hpp" #include "magic_enum_flags.hpp" +#include #if !defined(MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT) #define MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT 1 diff --git a/module/dll_source_lzy/ecap/lib/device_uhd_c.cpp b/module/dll_source_lzy/ecap/lib/device_uhd_c.cpp index f5447e4..cc790b8 100644 --- a/module/dll_source_lzy/ecap/lib/device_uhd_c.cpp +++ b/module/dll_source_lzy/ecap/lib/device_uhd_c.cpp @@ -10,6 +10,7 @@ #include #include #include +#include rx_data_cbk_t s_cbk; @@ -1335,7 +1336,7 @@ struct Global_Read_Buffer { std::swap(ret, buffer); return ret; } - void append(std::string buf) { + void append(std::string_view buf) { std::lock_guard g(mtx); buffer.append(buf); } diff --git a/module/dll_source_lzy/ecap/lib/hulc/Bit.cpp b/module/dll_source_lzy/ecap/lib/hulc/Bit.cpp index d283512..49ee6d7 100644 --- a/module/dll_source_lzy/ecap/lib/hulc/Bit.cpp +++ b/module/dll_source_lzy/ecap/lib/hulc/Bit.cpp @@ -4,6 +4,7 @@ #include #include #include +#include // 2025-01-02 05:01:50 [info] 1a480118 9607f81e f020 3a24 67761dbd 1a9ecbf8 // 5655c75b 00601307 #include @@ -95,8 +96,8 @@ const bool is_big_endian = []() { auto *p = reinterpret_cast(&x); return p[0] == 0x01; // 如果 p[0] 为 0x01,说明是大端字节序 }(); -std::vector split(const std::string &str, - const std::string &delimiter) { +std::vector split(std::string_view str, + std::string_view delimiter) { std::vector tokens; size_t start = 0; size_t end = str.find(delimiter); @@ -110,7 +111,7 @@ std::vector split(const std::string &str, tokens.push_back(str.substr(start)); // Add the last token return tokens; } -std::string bin2mem(const std::string &bin) { +std::string bin2mem(std::string_view bin) { const size_t len = bin.size(); if (len % 8 != 0) { throw std::invalid_argument("binary string length must be a multiple of 8"); @@ -395,7 +396,7 @@ TEST(Bi222, xor_hex_Ex) { #endif // 将字节序从大端转换到当前平台字节序,并复制到目标内存中 -void big_endian_2_platform(const std::string &big_endian, char *dest) { +void big_endian_2_platform(std::string_view big_endian, char *dest) { // 先复制原始数据 std::string result = big_endian; // 如果当前平台是小端,反转数据 @@ -405,14 +406,14 @@ void big_endian_2_platform(const std::string &big_endian, char *dest) { // 将转换后的数据拷贝到目标内存中 std::memcpy(dest, result.data(), result.size()); } -std::string big_endian_2_platform(const std::string &big_endian) { +std::string big_endian_2_platform(std::string_view big_endian) { std::string result; result.resize(big_endian.size()); big_endian_2_platform(big_endian, result.data()); return result; } // 将字节序从小端转换到当前平台字节序,并复制到目标内存中 -void little_endian_2_platform(const std::string &little_endian, char *dest) { +void little_endian_2_platform(std::string_view little_endian, char *dest) { // 先复制原始数据 std::string result = little_endian; // 如果当前平台是大端,反转数据 @@ -422,7 +423,7 @@ void little_endian_2_platform(const std::string &little_endian, char *dest) { // 将转换后的数据拷贝到目标内存中 std::memcpy(dest, result.data(), result.size()); } -std::string little_endian_2_platform(const std::string &little_endian) { +std::string little_endian_2_platform(std::string_view little_endian) { std::string result; result.resize(little_endian.size()); big_endian_2_platform(little_endian, result.data()); diff --git a/module/dll_source_lzy/ecap/lib/hulc/Bit.h b/module/dll_source_lzy/ecap/lib/hulc/Bit.h index 81d2c5d..9eaab26 100644 --- a/module/dll_source_lzy/ecap/lib/hulc/Bit.h +++ b/module/dll_source_lzy/ecap/lib/hulc/Bit.h @@ -1,6 +1,7 @@ #ifndef BitSet_H #define BitSet_H #include +#include #ifdef __linux__ #include #endif @@ -70,11 +71,11 @@ extern const bool is_big_endian; void big_endian_2_platform(void *dest, const char *d, size_t size); void little_endian_2_platform(void *dest, const char *d, size_t size); -void big_endian_2_platform(const std::string &big_endian, char *dest); -void little_endian_2_platform(const std::string &little_endian, char *dest); +void big_endian_2_platform(std::string_view big_endian, char *dest); +void little_endian_2_platform(std::string_view little_endian, char *dest); -std::string big_endian_2_platform(const std::string &big_endian); -std::string little_endian_2_platform(const std::string &little_endian); +std::string big_endian_2_platform(std::string_view big_endian); +std::string little_endian_2_platform(std::string_view little_endian); std::string platform_2_big_endian(void *memory, int size); std::string platform_2_little_endian(void *memory, int size); @@ -180,7 +181,7 @@ void mem2hex_Ex2(void *dest, void *mem, size_t num, bool uppercase, const char *middle, size_t middle_len = std::numeric_limits::max()); Base STR_Type mem2hex(const STR_Type &mem, bool uppercase = true, - const std::string &middle = "", + std::string_view middle = "", std::pmr::memory_resource *resource = nullptr) { auto size = cacl_type::size(mem); auto ret = @@ -209,7 +210,7 @@ template Enum get_bin(std::string &msg) { return static_cast( std::bitset(msg.substr(start, len)).to_ullong()); } -template int get_bin(const std::string &msg) { +template int get_bin(std::string_view msg) { return std::bitset(msg.substr(start, len)).to_ullong(); } template @@ -217,7 +218,7 @@ void set_bin(std::string &msg, unsigned long long n) { msg.replace(start, len, std::bitset(n).to_string()); } template -void set_bin(std::string &msg, const std::string &value) { +void set_bin(std::string &msg, std::string_view value) { if (value.size() != len) { std::cout << "len == " << len << " bits.size() == " << value.size() << std::endl; @@ -231,13 +232,13 @@ template std::string to_bin(unsigned long long n) { template std::string to_bin(double n) { return std::bitset(static_cast(n)).to_string(); } -template T bin2(const std::string &binstr) { +template T bin2(std::string_view binstr) { return std::stoull(binstr, nullptr, 2); } -template unsigned long long hex2(const std::string &hexstr) { +template unsigned long long hex2(std::string_view hexstr) { return std::stoull(hexstr, nullptr, 16); } -template <> inline int bin2(const std::string &binstr) { +template <> inline int bin2(std::string_view binstr) { int bit_limit = sizeof(int) * 8; if (binstr.size() > bit_limit) { std::cout << "Bitset.h inline int bin2 error! Binary string exceeds " diff --git a/module/dll_source_lzy/ecap/lib/hulc/DataOutputFormats.cpp b/module/dll_source_lzy/ecap/lib/hulc/DataOutputFormats.cpp index 034ef72..12cb532 100644 --- a/module/dll_source_lzy/ecap/lib/hulc/DataOutputFormats.cpp +++ b/module/dll_source_lzy/ecap/lib/hulc/DataOutputFormats.cpp @@ -2,6 +2,7 @@ #include #include +#include using namespace yC; @@ -22,7 +23,7 @@ MLAT_timestamp::MLAT_timestamp() { parse_hhmmss(); } -MLAT_timestamp::MLAT_timestamp(const std::string &memory_6) : memory(memory_6) { +MLAT_timestamp::MLAT_timestamp(std::string_view memory_6) : memory(memory_6) { assert(memory_6.size() == 6); auto msg_bin = hex2bin(mem2hex(memory)); daysec = std::bitset<18>(msg_bin.substr(0, 18)).to_ulong(); @@ -55,7 +56,7 @@ void MLAT_timestamp::parse_hhmmss() { mm = (daysec / 60) % 60; ss = daysec % 60; } -std::string packet_to_escape_format(std::string t) { +std::string packet_to_escape_format(std::string_view t) { std::string result = "\x1a"; for (size_t i = 1; i < t.size(); ++i) { result.push_back(t[i]); // 插入当前字符 @@ -66,7 +67,7 @@ std::string packet_to_escape_format(std::string t) { return result; } void Binary_Format_handle_buffer( - std::string &buffer, const std::string &data, + std::string &buffer, std::string_view data, const std::function &callback) { size_t i = 0; while (i < data.size()) { @@ -99,7 +100,7 @@ void Binary_Format_handle_buffer( // 9 + 7 // 9 + 14 std::string mode_s_msg_packet_to_server_packet(std::uint32_t id, - std::string packet) { + std::string_view packet) { std::string id_code = yC::platform_2_big_endian((char *)&id, sizeof(id)); // assert(id_code.size() == 4, "id.size != 4"); packet.insert(1, id_code.c_str(), 4); diff --git a/module/dll_source_lzy/ecap/lib/hulc/DataOutputFormats.h b/module/dll_source_lzy/ecap/lib/hulc/DataOutputFormats.h index 047dd11..21c0c4d 100644 --- a/module/dll_source_lzy/ecap/lib/hulc/DataOutputFormats.h +++ b/module/dll_source_lzy/ecap/lib/hulc/DataOutputFormats.h @@ -1,13 +1,14 @@ #ifndef DATAOUTPUTFORMATS_H #define DATAOUTPUTFORMATS_H #include "base_format.h" +#include using namespace yC; // AVR format // *02E99619FACDAE; // *8D3C5EE69901BD9540078D37335F; // *7700; -inline std::string create_AVR_format(const std::string &msg_hex) { +inline std::string create_AVR_format(std::string_view msg_hex) { return "*" + msg_hex + ";"; } @@ -16,7 +17,7 @@ inline std::string create_AVR_format(const std::string &msg_hex) { // @016CE3671C747700; // @5500068BA46CB402c18d34fc8000; -inline std::string create_MLAT_AVR_format(const std::string &msg_hex, +inline std::string create_MLAT_AVR_format(std::string_view msg_hex, MLAT_timestamp *timestamp) { // std::string signal_level_str = // bin2hex(std::bitset<8>(signal_level).to_string()); std::cout << "signal:" @@ -32,7 +33,7 @@ inline std::string create_MLAT_AVR_format(const std::string &msg_hex, // configuration settings, time stamp error ticks as int8_t (1 tick is 15ns) // (message "4" not on Mode-S Beast classic) : true 0x1a is // 0x1a, and "1", "2" and "3" are 0x31, 0x32 and 0x33 -inline std::string create_Binary_Format_memory(const std::string &msg_hex, +inline std::string create_Binary_Format_memory(std::string_view msg_hex, char signal_level, MLAT_timestamp *timestamp) { std::string type; @@ -72,9 +73,9 @@ inline std::string create_Binary_Format_memory(const std::string &msg_hex, } // 把要传递的信息转化成转义字符 二进制==>转义二进制 -std::string packet_to_escape_format(std::string t); +std::string packet_to_escape_format(std::string_view t); -inline std::string unescape_packet(std::string t) { +inline std::string unescape_packet(std::string_view t) { std::string result; for (size_t i = 0; i < t.size(); ++i) { if (t[i] == '\x1a' && i + 1 < t.size() && t[i + 1] == '\x1a') { @@ -117,7 +118,7 @@ inline std::string create_Binary_Format_4(MLAT_timestamp timestamp, struct TCXO_Clock { unsigned long long times; - explicit TCXO_Clock(const std::string &hex) { + explicit TCXO_Clock(std::string_view hex) { times = std::bitset<48>(hex2bin(hex)).to_ullong(); } @@ -325,7 +326,7 @@ struct HULC_Status_Message : HULC_Message { return ret; } - static double decodeLatitudeFromBAM(const std::string &bigdian4) { + static double decodeLatitudeFromBAM(std::string_view bigdian4) { std::uint32_t value; yC::big_endian_2_platform(bigdian4, (char *)&value); // BAM 格式解码公式 @@ -349,18 +350,18 @@ struct HULC_Status_Message : HULC_Message { } }; -static void hulc_big_endian_set(const std::string &msg, void *field, int start, +static void hulc_big_endian_set(std::string_view msg, void *field, int start, int len) { auto str = msg.substr(start, len); yC::big_endian_2_platform(str, (char *)field); } -static void hulc_set2(const std::string &msg, void *field, int start, int len) { +static void hulc_set2(std::string_view msg, void *field, int start, int len) { auto it = msg.substr(start, len); std::memcpy(field, it.data(), len); } // msg 是文本二进制字符串 转义后的 1a34 -static HULC_Status_Message create_HULC_Status_Message(const std::string &msg) { +static HULC_Status_Message create_HULC_Status_Message(std::string_view msg) { HULC_Status_Message ret{}; hulc_big_endian_set(msg, &ret.SerNum, 4, 4); hulc_big_endian_set(msg, &ret.Flags, 8, 2); @@ -380,9 +381,9 @@ struct HULC_Reply_to_command : HULC_Message { }; // 0x1A 0x48 0x01 0x18 SerNum Flags I.U. xTime Lat Lon Alt Sat HDOP -inline std::uint8_t get_id(const std::string &msg) { return msg[2]; } +inline std::uint8_t get_id(std::string_view msg) { return msg[2]; } -inline std::uint8_t get_len(const std::string &msg) { return msg[3]; } +inline std::uint8_t get_len(std::string_view msg) { return msg[3]; } // Type Payload Size Description // 0x31 4 bytes Mode-A/C raw data @@ -400,7 +401,7 @@ inline std::uint8_t get_len(const std::string &msg) { return msg[3]; } // During Transmission: 1A 32 27 1A 1A E8 57 F0 1A 1A 6C // After Un-Escaping: 1A 32 27 1A E8 57 F0 1A 6C void Binary_Format_handle_buffer( - std::string &buffer, const std::string &data, + std::string &buffer, std::string_view data, const std::function &callback); /* Command Message (Host ==> Device) The command-message has a simple ASCII based structure. Each message starts with @@ -414,7 +415,7 @@ in the respective protocol section. */ std::string mode_s_msg_packet_to_server_packet(std::uint32_t id, - std::string packet); + std::string_view packet); // 1a34 radarcape 状态帧消息 // https://wiki.jetvision.de/wiki/Radarcape:Version_History#Status_Frame_0x34_contents_were_extended_with_GPS_and_UTC_information @@ -532,7 +533,7 @@ struct Radarcape_STATUS_Message { // 消息5字节 // static Radarcape_STATUS_Message -create_Radarcape_STATUS_Message(const std::string &msg_5) { +create_Radarcape_STATUS_Message(std::string_view msg_5) { std::string msg = yC::big_endian_2_platform(msg_5.substr(2)); Radarcape_STATUS_Message ret{}; std::memcpy(&ret, (void *)(msg.data()), 3); diff --git a/module/dll_source_lzy/ecap/lib/hulc/base_format.h b/module/dll_source_lzy/ecap/lib/hulc/base_format.h index 0fb0a14..c6a5078 100644 --- a/module/dll_source_lzy/ecap/lib/hulc/base_format.h +++ b/module/dll_source_lzy/ecap/lib/hulc/base_format.h @@ -22,11 +22,12 @@ #include #include #include +#include // 1纳秒是 10 -9次方秒 struct MLAT_timestamp { explicit MLAT_timestamp(); - explicit MLAT_timestamp(const std::string &memory_6); + explicit MLAT_timestamp(std::string_view memory_6); MLAT_timestamp(std::uint32_t daysec, std::uint32_t nanosec); std::uint32_t daysec{}; // 当天的秒数 高18位 std::uint32_t nanosec{}; // 当天的纳秒数 低30位 diff --git a/module/dll_source_lzy/ecap/lib/hulc/magic_enum/export.h b/module/dll_source_lzy/ecap/lib/hulc/magic_enum/export.h index 36f7c43..50c9449 100644 --- a/module/dll_source_lzy/ecap/lib/hulc/magic_enum/export.h +++ b/module/dll_source_lzy/ecap/lib/hulc/magic_enum/export.h @@ -3,8 +3,9 @@ #include "magic_enum/magic_enum.hpp" #include #include +#include -template EnumType to_enum(const std::string &str) { +template EnumType to_enum(std::string_view str) { auto opt = magic_enum::enum_cast(str); if (opt.has_value()) { return opt.value(); // 返回枚举值 @@ -15,7 +16,7 @@ template EnumType to_enum(const std::string &str) { } template -std::optional to_enum2(const std::string &str) { +std::optional to_enum2(std::string_view str) { auto opt = magic_enum::enum_cast(str); if (opt.has_value()) { return opt.value(); // 返回枚举值 @@ -65,7 +66,7 @@ template std::vector split_flags(Enum flags) { inline std::string to_string(const char *val) { return std::string(val); } -template <> inline std::string to_string(std::string val) { return val; } +template <> inline std::string to_string(std::string_view val) { return val; } template <> inline std::string to_string(bool val) { return val ? "true" : "false"; } diff --git a/module/dll_source_lzy/ecap/lib/hulc/magic_enum/magic_enum/magic_enum_format.hpp b/module/dll_source_lzy/ecap/lib/hulc/magic_enum/magic_enum/magic_enum_format.hpp index 392be5d..11b55a2 100644 --- a/module/dll_source_lzy/ecap/lib/hulc/magic_enum/magic_enum/magic_enum_format.hpp +++ b/module/dll_source_lzy/ecap/lib/hulc/magic_enum/magic_enum/magic_enum_format.hpp @@ -34,6 +34,7 @@ #include "magic_enum.hpp" #include "magic_enum_flags.hpp" +#include #if !defined(MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT) #define MAGIC_ENUM_DEFAULT_ENABLE_ENUM_FORMAT 1 diff --git a/module/get_track_tool_main_backup.cpp b/module/get_track_tool_main_backup.cpp index 28fb013..d5d6fd0 100644 --- a/module/get_track_tool_main_backup.cpp +++ b/module/get_track_tool_main_backup.cpp @@ -4,12 +4,13 @@ #include "Local_Server/Data_Source.h" #include "Local_Server/Data_Source.h" #include "SSR/export.h" +#include using namespace Psc; int max_distance = 700; class MY_File_Data_Source : public File_Data_Source { public: BaseLogger* logger{}; - void pre_handle(const std::string& data) override {} + void pre_handle(std::string_view data) override {} void handle_mode_s(std::string& packet) override {} }; std::map air_map; @@ -45,7 +46,7 @@ void handle(const fs::path& file_path, const fs::path& rel_path) { std::cout << "first:" << mem2hex(packet) << std::endl; return; } - std::string error_len = key + " " + LOG_POS_SIMPLE + " mode_s_error_length"; + std::string_view error_len = key + " " + LOG_POS_SIMPLE + " mode_s_error_length"; auto type = packet[1]; if (type == Msg::AC) { if (packet.size() != Msg::AC_len) { @@ -97,9 +98,9 @@ void handle(const fs::path& file_path, const fs::path& rel_path) { // 拓展点 auto mode_s_msg = std::make_unique(nullptr, packet); std::string& msg_hex = mode_s_msg->msg_hex; - std::string msg_bin = hex2bin(mode_s_msg->msg_hex); + std::string_view msg_bin = hex2bin(mode_s_msg->msg_hex); auto df = ::decode_df(msg_bin); - std::string icao = ::decode_icao(msg_bin); + std::string_view icao = ::decode_icao(msg_bin); JSON msg_json = JSON::object(); MLAT_timestamp* mlat_timestamp = &mode_s_msg->mlat_timestamp; Log_Type lt({}, { @@ -208,7 +209,7 @@ void list_directory(const fs::path& dir_path, const fs::path& base_path) { } } } -std::wstring _transformString2Wstring(const std::string& s) { +std::wstring _transformString2Wstring(std::string_view s) { setlocale(LC_CTYPE, "en_US.UTF-8"); const char* _Source = s.c_str(); size_t len = strlen(_Source) + 1; @@ -219,7 +220,7 @@ std::wstring _transformString2Wstring(const std::string& s) { delete[] wStr; return result; } -std::wstring gbk_to_wstring(const std::string& gbk) { +std::wstring gbk_to_wstring(std::string_view gbk) { int len = MultiByteToWideChar(CP_ACP, 0, gbk.c_str(), -1, nullptr, 0); std::wstring wstr(len, L'\0'); MultiByteToWideChar(CP_ACP, 0, gbk.c_str(), -1, &wstr[0], len); diff --git a/module/mlat_source/mlat_dll.cpp b/module/mlat_source/mlat_dll.cpp index 2a5ac5b..2dcbb45 100644 --- a/module/mlat_source/mlat_dll.cpp +++ b/module/mlat_source/mlat_dll.cpp @@ -11,6 +11,7 @@ #include #include #include +#include using Func_Type = void (*)(MLAT_Data *buf, std::uint16_t *len); Func_Type read_func_ptr{}; @@ -28,7 +29,7 @@ double lat = 121.473701; // // *len = 1; // } -time_t datetime_to_timestamp(const std::string &datetime) { +time_t datetime_to_timestamp(std::string_view datetime) { std::tm tm = {}; std::istringstream ss(datetime); ss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");