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