diff options
Diffstat (limited to 'src/lib/util/corestr.h')
-rw-r--r-- | src/lib/util/corestr.h | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/src/lib/util/corestr.h b/src/lib/util/corestr.h index c0bf4ef16d5..a9fc52531c8 100644 --- a/src/lib/util/corestr.h +++ b/src/lib/util/corestr.h @@ -13,12 +13,11 @@ #pragma once -#include "osdcore.h" -#include "strformat.h" - #include <string> +#include <string_view> -#include <string.h> +#include <algorithm> +#include <cstring> /*************************************************************************** @@ -26,7 +25,7 @@ ***************************************************************************/ /* since stricmp is not part of the standard, we use this instead */ -int core_stricmp(const char *s1, const char *s2); +int core_stricmp(std::string_view s1, std::string_view s2); /* this macro prevents people from using stricmp directly */ #undef stricmp @@ -50,24 +49,39 @@ int core_strnicmp(const char *s1, const char *s2, size_t n); /* additional string compare helper (up to 16 characters at the moment) */ -int core_strwildcmp(const char *sp1, const char *sp2); -bool core_iswildstr(const char *sp); - - -int strcatvprintf(std::string &str, const char *format, va_list args); +int core_strwildcmp(std::string_view s1, std::string_view s2); +bool core_iswildstr(std::string_view s); + +/* trim functions */ +template <typename TPred> +std::string_view strtrimleft(std::string_view str, TPred &&pred) +{ + auto const start = std::find_if(str.begin(), str.end(), pred); + return str.substr(start - str.begin()); +} + +template <typename TPred> +std::string_view strtrimright(std::string_view str, TPred &&pred) +{ + auto const end = std::find_if(str.rbegin(), str.rend(), pred); + return str.substr(0, str.size() - (end - str.rbegin())); +} void strdelchr(std::string& str, char chr); void strreplacechr(std::string& str, char ch, char newch); -std::string &strtrimspace(std::string& str); -std::string &strtrimrightspace(std::string& str); -std::string &strmakeupper(std::string& str); -std::string &strmakelower(std::string& str); +[[nodiscard]] std::string_view strtrimspace(std::string_view str); +[[nodiscard]] std::string_view strtrimrightspace(std::string_view str); +[[nodiscard]] std::string strmakeupper(std::string_view str); +[[nodiscard]] std::string strmakelower(std::string_view str); int strreplace(std::string &str, const std::string& search, const std::string& replace); namespace util { +bool strequpper(std::string_view str, std::string_view ucstr); +bool streqlower(std::string_view str, std::string_view lcstr); + // based on Jaro-Winkler distance - returns value from 0.0 (totally dissimilar) to 1.0 (identical) -double edit_distance(std::u32string const &lhs, std::u32string const &rhs); +double edit_distance(std::u32string_view lhs, std::u32string_view rhs); } // namespace util |