std::string_view 的使用

This commit is contained in:
2026-06-29 09:40:55 +08:00
parent cd446b7ca8
commit 8daf67aa5d
52 changed files with 1420 additions and 1367 deletions
@@ -17,6 +17,7 @@
#include <stdexcept>
#include <utility>
#include <variant>
#include <string_view>
namespace {
Psc::JSON
@@ -77,8 +78,8 @@ asio::awaitable<T> await_external_database_callback(Starter starter) {
} // namespace
std::optional<std::string>
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<SQLite::Database>(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_Database_Row>
External_Resources_Manager::query_external_database(
const std::string &resource_name,
std::string_view resource_name,
const std::vector<std::string> &primary_key_values) const {
return query_one(require_db(), resource_name, primary_key_values);
}
std::map<std::string, std::shared_ptr<External_Database_Row>>
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<External_Resource_Status>(
[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<External_Resource_Status>(
[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<External_Resource_Status>(
[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<std::string> primary_key_values,
std::string_view resource_name, std::vector<std::string> primary_key_values,
Row_Callback callback) const {
run_external_database_async<std::optional<External_Database_Row>>(
[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<std::string, std::shared_ptr<External_Database_Row>>>(
[this, icao24 = std::move(icao24)]() {
@@ -429,7 +430,7 @@ External_Resources_Manager::refresh_external_databases_coro(
asio::awaitable<External_Resource_Status>
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<External_Resource_Status>(
[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_Resource_Status>
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<External_Resource_Status>(
[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_Resource_Status>
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<External_Resource_Status>(
[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<std::optional<External_Database_Row>>
External_Resources_Manager::query_external_database_coro(
std::string resource_name,
std::string_view resource_name,
std::vector<std::string> primary_key_values) const {
co_return co_await await_external_database_callback<
std::optional<External_Database_Row>>(
@@ -478,7 +479,7 @@ External_Resources_Manager::query_external_database_coro(
asio::awaitable<std::shared_ptr<External_Database_Row_Map>>
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<External_Database_Row_Map>>(
[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_Database_Row> External_Resources_Manager::query_one(
SQLite::Database &db, const std::string &resource_name,
SQLite::Database &db, std::string_view resource_name,
const std::vector<std::string> &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_Database_Row> External_Resources_Manager::query_one(
std::map<std::string, std::shared_ptr<External_Database_Row>>
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<std::string, std::shared_ptr<External_Database_Row>> result;
const auto add_row = [&](const std::string &resource_name,
const auto add_row = [&](std::string_view resource_name,
const std::vector<std::string> &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<External_Database_Row>{};
auto shared_row = std::make_shared<External_Database_Row>(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<std::string> 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>{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<std::string, std::shared_ptr<External_Database_Row>> result;
const auto add_row = [&](const std::string &resource_name,
const auto add_row = [&](std::string_view resource_name,
const std::vector<std::string> &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<External_Resource_Status>