From 5250c229315dab9a6dbf68385dae88f561b0fbe1 Mon Sep 17 00:00:00 2001 From: наб Date: Thu, 14 Nov 2024 17:36:43 +0100 Subject: Move StringViewCompareFast to strutil.h --- apt-pkg/contrib/string_view.h | 11 ----------- apt-pkg/contrib/strutl.h | 26 +++++++++++++++++++------- 2 files changed, 19 insertions(+), 18 deletions(-) (limited to 'apt-pkg/contrib') diff --git a/apt-pkg/contrib/string_view.h b/apt-pkg/contrib/string_view.h index b062517b6..34a8e8a95 100644 --- a/apt-pkg/contrib/string_view.h +++ b/apt-pkg/contrib/string_view.h @@ -146,17 +146,6 @@ inline std::ostream& operator<<(std::ostream& os, const StringView& sv) return os << static_cast(sv); } -/** - * \brief Faster comparison for string views (compare size before data) - * - * Still stable, but faster than the normal ordering. */ -static inline int StringViewCompareFast(const std::string_view & a, const std::string_view & b) { - if (a.size() != b.size()) - return a.size() - b.size(); - - return a.compare(b); -} - static constexpr inline APT::StringView operator""_sv(const char *data, size_t size) { return APT::StringView(data, size); diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h index 152477eee..90d9674fd 100644 --- a/apt-pkg/contrib/strutl.h +++ b/apt-pkg/contrib/strutl.h @@ -4,16 +4,16 @@ /* ###################################################################### String Util - These are some useful string functions - + _strstrip is a function to remove whitespace from the front and end of a string. - + This file had this historic note, but now includes further changes under the GPL-2.0+: This source is placed in the Public Domain, do with it what you will - It was originally written by Jason Gunthorpe - + It was originally written by Jason Gunthorpe + ##################################################################### */ /*}}}*/ #ifndef STRUTL_H @@ -26,6 +26,7 @@ #include #include #include +#include #include #include "macros.h" @@ -121,13 +122,13 @@ APT_PUBLIC std::vector VectorizeString(std::string const &haystack, * * \param maxsplit (optional) The maximum amount of splitting that * should be done . - * + * * The optional "maxsplit" argument can be used to limit the splitting, * if used the string is only split on maxsplit places and the last * item in the vector contains the remainder string. */ APT_PUBLIC std::vector StringSplit(std::string const &input, - std::string const &sep, + std::string const &sep, unsigned int maxsplit=std::numeric_limits::max()) APT_PURE; @@ -229,7 +230,7 @@ class APT_PUBLIC URI std::string Host; std::string Path; unsigned int Port; - + operator std::string(); inline void operator =(const std::string &From) {CopyFrom(From);} inline bool empty() {return Access.empty();}; @@ -258,4 +259,15 @@ struct RxChoiceList APT_PUBLIC unsigned long RegexChoice(RxChoiceList *Rxs,const char **ListBegin, const char **ListEnd); +/** + * \brief Faster comparison for string views (compare size before data) + * + * Still stable, but faster than the normal ordering. */ +static inline int StringViewCompareFast(const std::string_view & a, const std::string_view & b) { + if (a.size() != b.size()) + return a.size() - b.size(); + + return a.compare(b); +} + #endif -- cgit v1.2.3-70-g09d2 From de6ec4aca77d0a56e30d08dbc12661bdda0c6e69 Mon Sep 17 00:00:00 2001 From: наб Date: Tue, 12 Nov 2024 17:59:17 +0100 Subject: apt-pkg/contrib/hashes.cc, apt-pkg/contrib/hashes.h: APT::StringView -> std::string_view in private interface. Take std::string_view instead of std::string const& for HashString::HashString (not reused) [#if APT_PKG_ABI > 600] --- apt-pkg/contrib/hashes.cc | 12 ++++++++---- apt-pkg/contrib/hashes.h | 13 ++++++++----- 2 files changed, 16 insertions(+), 9 deletions(-) (limited to 'apt-pkg/contrib') diff --git a/apt-pkg/contrib/hashes.cc b/apt-pkg/contrib/hashes.cc index 0ad51fff0..06bfd003e 100644 --- a/apt-pkg/contrib/hashes.cc +++ b/apt-pkg/contrib/hashes.cc @@ -3,10 +3,10 @@ /* ###################################################################### Hashes - Simple wrapper around the hash functions - + This is just used to make building the methods simpler, this is the only interface required.. - + ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ @@ -66,7 +66,11 @@ HashString::HashString(std::string Type, std::string Hash) : Type(Type), Hash(Ha { } -HashString::HashString(std::string StringedHash) /*{{{*/ +#if APT_PKG_ABI > 600 +HashString::HashString(std::string_view StringedHash) /*{{{*/ +#else +HashString::HashString(std::string StringedHash) /*{{{*/ +#endif { if (StringedHash.find(":") == std::string::npos) { @@ -80,7 +84,7 @@ HashString::HashString(std::string StringedHash) /*{{{*/ std::clog << "HashString(string): invalid StringedHash " << StringedHash << std::endl; return; } - std::string::size_type pos = StringedHash.find(":"); + auto pos = StringedHash.find(":"); Type = StringedHash.substr(0,pos); Hash = StringedHash.substr(pos+1, StringedHash.size() - pos); diff --git a/apt-pkg/contrib/hashes.h b/apt-pkg/contrib/hashes.h index e259b4e28..69b742f10 100644 --- a/apt-pkg/contrib/hashes.h +++ b/apt-pkg/contrib/hashes.h @@ -3,10 +3,10 @@ /* ###################################################################### Hashes - Simple wrapper around the hash functions - + This is just used to make building the methods simpler, this is the only interface required.. - + ##################################################################### */ /*}}}*/ #ifndef APTPKG_HASHES_H @@ -15,7 +15,6 @@ #include #ifdef APT_COMPILING_APT -#include #include #endif @@ -41,7 +40,11 @@ class APT_PUBLIC HashString public: HashString(std::string Type, std::string Hash); +#if APT_PKG_ABI > 600 + explicit HashString(std::string_view StringedHashString); // init from str as "type:hash" +#else explicit HashString(std::string StringedHashString); // init from str as "type:hash" +#endif HashString(); // get hash type used @@ -66,9 +69,9 @@ class APT_PUBLIC HashString static APT_PURE const char** SupportedHashes(); #ifdef APT_COMPILING_APT struct APT_HIDDEN HashSupportInfo { - APT::StringView name; + std::string_view name; pkgTagSection::Key namekey; - APT::StringView chksumsname; + std::string_view chksumsname; pkgTagSection::Key chksumskey; }; APT_HIDDEN static std::vector SupportedHashesInfo(); -- cgit v1.2.3-70-g09d2 From 0cc32385f109705aac51e354d854833d6203f773 Mon Sep 17 00:00:00 2001 From: наб Date: Thu, 14 Nov 2024 17:40:13 +0100 Subject: if APT_PKG_ABI > 600: using APT::StringView = std::string_view; --- apt-pkg/contrib/string_view.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'apt-pkg/contrib') diff --git a/apt-pkg/contrib/string_view.h b/apt-pkg/contrib/string_view.h index 34a8e8a95..6224e2ac4 100644 --- a/apt-pkg/contrib/string_view.h +++ b/apt-pkg/contrib/string_view.h @@ -15,6 +15,11 @@ #include #include +#if APT_PKG_ABI > 600 +namespace APT { +using StringView = std::string_view; +} +#else namespace APT { /** @@ -157,5 +162,6 @@ inline bool operator ==(const char *other, APT::StringView that) { return that.o template bool operator ==(std::string_view const &other, APT::StringView const &that) { return that.operator==(other); } template bool operator !=(std::string_view const &other, APT::StringView const &that) { return that.operator!=(other); } template bool operator !=(APT::StringView const &that, std::string_view const &other) { return that.operator!=(other); } +#endif #endif -- cgit v1.2.3-70-g09d2