From e81fd93491b10192a159786a13178eb57dad33f9 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 21 Jan 2025 17:45:17 +0100 Subject: [PATCH] stock/{Map,Multi}: pass std::string_view as name --- src/stock/BasicStock.hxx | 4 ++++ src/stock/MapStock.cxx | 17 ++++++----------- src/stock/MapStock.hxx | 12 ++++++------ src/stock/MultiStock.cxx | 16 +++++++--------- src/stock/MultiStock.hxx | 12 ++++++------ 5 files changed, 29 insertions(+), 32 deletions(-) diff --git a/src/stock/BasicStock.hxx b/src/stock/BasicStock.hxx index 8b6f2c15b..dc059fe71 100644 --- a/src/stock/BasicStock.hxx +++ b/src/stock/BasicStock.hxx @@ -98,6 +98,10 @@ public: return cls; } + std::string_view GetNameView() const noexcept { + return name; + } + const char *GetName() const noexcept override { return name.c_str(); } diff --git a/src/stock/MapStock.cxx b/src/stock/MapStock.cxx index 58a82b598..2dd0b9311 100644 --- a/src/stock/MapStock.cxx +++ b/src/stock/MapStock.cxx @@ -5,7 +5,7 @@ #include "MapStock.hxx" #include "util/djb_hash.hxx" #include "util/DeleteDisposer.hxx" -#include "util/StringAPI.hxx" +#include "util/SpanCast.hxx" void StockMap::Item::OnDeferredEmpty() noexcept @@ -15,20 +15,15 @@ StockMap::Item::OnDeferredEmpty() noexcept } inline size_t -StockMap::Item::Hash::operator()(const char *key) const noexcept +StockMap::Item::Hash::operator()(std::string_view key) const noexcept { - assert(key != nullptr); - - return djb_hash_string(key); + return djb_hash(AsBytes(key)); } inline bool -StockMap::Item::Equal::operator()(const char *a, const char *b) const noexcept +StockMap::Item::Equal::operator()(std::string_view a, std::string_view b) const noexcept { - assert(a != nullptr); - assert(b != nullptr); - - return StringIsEqual(a, b); + return a == b; } StockMap::StockMap(EventLoop &_event_loop, StockClass &_cls, @@ -53,7 +48,7 @@ StockMap::Erase(Item &item) noexcept } Stock & -StockMap::GetStock(const char *uri, const void *request) noexcept +StockMap::GetStock(std::string_view uri, const void *request) noexcept { auto [position, inserted] = map.insert_check(uri); if (inserted) { diff --git a/src/stock/MapStock.hxx b/src/stock/MapStock.hxx index 24977ebe2..6f603c53d 100644 --- a/src/stock/MapStock.hxx +++ b/src/stock/MapStock.hxx @@ -39,17 +39,17 @@ class StockMap { public: struct Hash { [[gnu::pure]] - size_t operator()(const char *key) const noexcept; + size_t operator()(std::string_view key) const noexcept; }; struct Equal { [[gnu::pure]] - bool operator()(const char *a, const char *b) const noexcept; + bool operator()(std::string_view a, std::string_view b) const noexcept; }; struct GetKeyFunction { [[gnu::pure]] - const char *operator()(const Item &item) const noexcept { + std::string_view operator()(const Item &item) const noexcept { return item.GetName(); } }; @@ -126,7 +126,7 @@ public: } [[gnu::pure]] - Stock &GetStock(const char *uri, const void *request) noexcept; + Stock &GetStock(std::string_view uri, const void *request) noexcept; /** * Set the "sticky" flag. Sticky stocks will not be deleted @@ -134,7 +134,7 @@ public: */ void SetSticky(Stock &stock, bool sticky) noexcept; - void Get(const char *uri, StockRequest &&request, + void Get(std::string_view uri, StockRequest &&request, StockGetHandler &handler, CancellablePointer &cancel_ptr) noexcept { Stock &stock = GetStock(uri, request.get()); @@ -148,7 +148,7 @@ public: * * Throws exception on error. */ - StockItem *GetNow(const char *uri, StockRequest &&request) { + StockItem *GetNow(std::string_view uri, StockRequest &&request) { Stock &stock = GetStock(uri, request.get()); return stock.GetNow(std::move(request)); } diff --git a/src/stock/MultiStock.cxx b/src/stock/MultiStock.cxx index d96d62ea9..5266cdec4 100644 --- a/src/stock/MultiStock.cxx +++ b/src/stock/MultiStock.cxx @@ -8,7 +8,7 @@ #include "Item.hxx" #include "util/djb_hash.hxx" #include "util/DeleteDisposer.hxx" -#include "util/StringAPI.hxx" +#include "util/SpanCast.hxx" #include @@ -585,17 +585,15 @@ MultiStock::MapItem::OnLeaseReleased(OuterItem &item) noexcept } inline std::size_t -MultiStock::MapItem::Hash::operator()(const char *key) const noexcept +MultiStock::MapItem::Hash::operator()(std::string_view key) const noexcept { - assert(key != nullptr); - - return djb_hash_string(key); + return djb_hash(AsBytes(key)); } inline bool -MultiStock::MapItem::Equal::operator()(const char *a, const char *b) const noexcept +MultiStock::MapItem::Equal::operator()(std::string_view a, std::string_view b) const noexcept { - return StringIsEqual(a, b); + return a == b; } MultiStock::MultiStock(EventLoop &_event_loop, StockClass &_outer_cls, @@ -653,7 +651,7 @@ MultiStock::DiscardOldestIdle(std::size_t n_requested) noexcept } inline MultiStock::MapItem & -MultiStock::MakeMapItem(const char *uri, const void *request) noexcept +MultiStock::MakeMapItem(std::string_view uri, const void *request) noexcept { auto [i, inserted] = map.insert_check(uri); if (inserted) { @@ -675,7 +673,7 @@ MultiStock::MakeMapItem(const char *uri, const void *request) noexcept } void -MultiStock::Get(const char *uri, StockRequest request, +MultiStock::Get(std::string_view uri, StockRequest request, std::size_t concurrency, StockGetHandler &handler, CancellablePointer &cancel_ptr) noexcept diff --git a/src/stock/MultiStock.hxx b/src/stock/MultiStock.hxx index f697e8462..e8b828b34 100644 --- a/src/stock/MultiStock.hxx +++ b/src/stock/MultiStock.hxx @@ -306,18 +306,18 @@ class MultiStock { public: struct Hash { [[gnu::pure]] - std::size_t operator()(const char *key) const noexcept; + std::size_t operator()(std::string_view key) const noexcept; }; struct Equal { [[gnu::pure]] - bool operator()(const char *a, const char *b) const noexcept; + bool operator()(std::string_view a, std::string_view b) const noexcept; }; struct GetKey { [[gnu::pure]] - const char *operator()(const MapItem &item) const noexcept { - return item.GetName(); + std::string_view operator()(const MapItem &item) const noexcept { + return item.name; } }; }; @@ -401,12 +401,12 @@ public: }); } - void Get(const char *uri, StockRequest request, + void Get(std::string_view uri, StockRequest request, std::size_t concurrency, StockGetHandler &handler, CancellablePointer &cancel_ptr) noexcept; private: [[gnu::pure]] - MapItem &MakeMapItem(const char *uri, const void *request) noexcept; + MapItem &MakeMapItem(std::string_view uri, const void *request) noexcept; };