string: remove excessive std::string_view helpers
The standard C++ approach is preferred over legacy C-style string operations. Some helpers have clean standard C++ implementation on std::string(_view) classes. All were just a simple .data() and .size() wrappers for legacy C functions. The main concern is the amount of helpers that require maintenance. Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
parent
37891e8a2a
commit
a5193c9738
@ -20,7 +20,6 @@
|
||||
#include <climits>
|
||||
#include <locale>
|
||||
#include <stdexcept>
|
||||
#include <string_view>
|
||||
|
||||
namespace stdex
|
||||
{
|
||||
@ -282,19 +281,6 @@ namespace stdex
|
||||
return strnlen(str, N);
|
||||
}
|
||||
|
||||
///
|
||||
/// Calculate zero-terminated string length.
|
||||
///
|
||||
/// \param[in] str String
|
||||
///
|
||||
/// \return Number of code units excluding zero terminator in the string.
|
||||
///
|
||||
template <class T>
|
||||
inline size_t strnlen(_In_ const std::basic_string_view<T, std::char_traits<T>> str)
|
||||
{
|
||||
return strnlen(str.data(), str.size());
|
||||
}
|
||||
|
||||
constexpr auto npos{ static_cast<size_t>(-1) };
|
||||
|
||||
///
|
||||
@ -351,22 +337,6 @@ namespace stdex
|
||||
return strnchr(str, N, chr);
|
||||
}
|
||||
|
||||
///
|
||||
/// Find a code unit in a string.
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[in] chr Code unit to search for
|
||||
///
|
||||
/// \return Offset to the first occurence of chr code unit or stdex::npos if not found.
|
||||
///
|
||||
template <class T>
|
||||
inline size_t strnchr(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_In_ T chr)
|
||||
{
|
||||
return strchr(str.data(), str.size(), chr);
|
||||
}
|
||||
|
||||
///
|
||||
/// Find a code unit in a string.
|
||||
///
|
||||
@ -425,20 +395,6 @@ namespace stdex
|
||||
return strrnchr(str, N, chr);
|
||||
}
|
||||
|
||||
///
|
||||
/// Find a code unit in a string.
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[in] chr Code unit to search for
|
||||
///
|
||||
/// \return Offset to the first occurence of chr code unit or stdex::npos if not found.
|
||||
///
|
||||
template <class T>
|
||||
inline size_t strrnchr(_In_ const std::basic_string_view<T, std::char_traits<T>> str, _In_ T chr)
|
||||
{
|
||||
return strrnchr(str.data(), str.size(), chr);
|
||||
}
|
||||
|
||||
///
|
||||
/// Find a code unit in a string ASCII-case-insensitive
|
||||
///
|
||||
@ -563,40 +519,6 @@ namespace stdex
|
||||
return strnichr(str, N, chr, locale);
|
||||
}
|
||||
|
||||
///
|
||||
/// Find a code unit in a string ASCII-case-insensitive
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[in] chr Code unit to search for
|
||||
///
|
||||
/// \return Offset to the first occurence of chr code unit or stdex::npos if not found.
|
||||
///
|
||||
template <class T>
|
||||
inline size_t strnichr(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_In_ T chr)
|
||||
{
|
||||
return strichr(str.data(), str.size(), chr);
|
||||
}
|
||||
|
||||
///
|
||||
/// Find a code unit in a string case-insensitive
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[in] chr Code unit to search for
|
||||
/// \param[in] locale C++ locale to use
|
||||
///
|
||||
/// \return Offset to the first occurence of chr code unit or stdex::npos if not found.
|
||||
///
|
||||
template <class T>
|
||||
inline size_t strnichr(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_In_ T chr,
|
||||
_In_ const std::locale& locale)
|
||||
{
|
||||
return strichr(str.data(), str.size(), chr, locale);
|
||||
}
|
||||
|
||||
///
|
||||
/// Find a code unit in a string ASCII-case-insensitive
|
||||
///
|
||||
@ -725,40 +647,6 @@ namespace stdex
|
||||
return strrnichr(str, N, chr, locale);
|
||||
}
|
||||
|
||||
///
|
||||
/// Find a code unit in a string ASCII-case-insensitive
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[in] chr Code unit to search for
|
||||
///
|
||||
/// \return Offset to the last occurence of chr code unit or stdex::npos if not found.
|
||||
///
|
||||
template <class T>
|
||||
inline size_t strrnichr(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_In_ T chr)
|
||||
{
|
||||
return strrnichr(str.data(), str.size(), chr);
|
||||
}
|
||||
|
||||
///
|
||||
/// Find a code unit in a string case-insensitive
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[in] chr Code unit to search for
|
||||
/// \param[in] locale C++ locale to use
|
||||
///
|
||||
/// \return Offset to the last occurence of chr code unit or stdex::npos if not found.
|
||||
///
|
||||
template <class T>
|
||||
inline size_t strrnichr(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_In_ T chr,
|
||||
_In_ const std::locale& locale)
|
||||
{
|
||||
return strrnichr(str.data(), str.size(), chr, locale);
|
||||
}
|
||||
|
||||
/////
|
||||
///// Checks if string contains all ASCII-white-space
|
||||
/////
|
||||
@ -869,36 +757,6 @@ namespace stdex
|
||||
return isblank(str, N, locale);
|
||||
}
|
||||
|
||||
///
|
||||
/// Checks if string contains all ASCII-white-space
|
||||
///
|
||||
/// \param[in] str String
|
||||
///
|
||||
/// \return `true` if all characters are white-space or `false` when any non-white-space character is found in string.
|
||||
///
|
||||
template <class T>
|
||||
inline bool isblank(_In_ const std::basic_string_view<T, std::char_traits<T>> str)
|
||||
{
|
||||
return isblank(str.data(), str.size());
|
||||
}
|
||||
|
||||
///
|
||||
/// Checks if string contains all white-space
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[in] locale C++ locale to use
|
||||
///
|
||||
/// \return `true` if all characters are white-space or `false` when any non-white-space character is found in string.
|
||||
///
|
||||
template <class T>
|
||||
inline bool isblank(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_In_ size_t count,
|
||||
_In_ const std::locale& locale)
|
||||
{
|
||||
return isblank(str.data(), str.size(), locale);
|
||||
}
|
||||
|
||||
///
|
||||
/// Binary compare two strings
|
||||
///
|
||||
@ -989,22 +847,6 @@ namespace stdex
|
||||
return strncmp(str1, N1, str2, N2);
|
||||
}
|
||||
|
||||
///
|
||||
/// Binary compare two strings
|
||||
///
|
||||
/// \param[in] str1 String 1
|
||||
/// \param[in] str2 String 2
|
||||
///
|
||||
/// \return Negative if str1<str2; positive if str1>str2; zero if str1==str2
|
||||
///
|
||||
template <class T1, class T2>
|
||||
inline int strncmp(
|
||||
_In_ const std::basic_string_view<T1, std::char_traits<T1>> str1,
|
||||
_In_ const std::basic_string_view<T2, std::char_traits<T2>> str2)
|
||||
{
|
||||
return strncmp(str1.data(), str1.size(), str2.data(), str2.size());
|
||||
}
|
||||
|
||||
///
|
||||
/// Binary compare two strings ASCII-case-insensitive
|
||||
///
|
||||
@ -1197,40 +1039,6 @@ namespace stdex
|
||||
strnicmp(str1, N1, str2, N2, locale);
|
||||
}
|
||||
|
||||
///
|
||||
/// Binary compare two strings case-insensitive
|
||||
///
|
||||
/// \param[in] str1 String 1
|
||||
/// \param[in] str2 String 2
|
||||
///
|
||||
/// \return Negative if str1<str2; positive if str1>str2; zero if str1==str2
|
||||
///
|
||||
template <class T1, class T2>
|
||||
inline int strnicmp(
|
||||
_In_ const std::basic_string_view<T1, std::char_traits<T1>> str1,
|
||||
_In_ const std::basic_string_view<T2, std::char_traits<T2>> str2)
|
||||
{
|
||||
return strnicmp(str1.data(), str1.size(), str2.data(), str2.size());
|
||||
}
|
||||
|
||||
///
|
||||
/// Binary compare two strings ASCII-case-insensitive
|
||||
///
|
||||
/// \param[in] str1 String 1
|
||||
/// \param[in] str2 String 2
|
||||
/// \param[in] locale C++ locale to use
|
||||
///
|
||||
/// \return Negative if str1<str2; positive if str1>str2; zero if str1==str2
|
||||
///
|
||||
template <class T1, class T2>
|
||||
inline int strnicmp(
|
||||
_In_ const std::basic_string_view<T1, std::char_traits<T1>> str1,
|
||||
_In_ const std::basic_string_view<T2, std::char_traits<T2>> str2,
|
||||
_In_ const std::locale& locale)
|
||||
{
|
||||
return strnicmp(str1.data(), str1.size(), str2.data(), str2.size(), locale);
|
||||
}
|
||||
|
||||
///
|
||||
/// Lexigraphically compare two strings
|
||||
///
|
||||
@ -1293,24 +1101,6 @@ namespace stdex
|
||||
return strncoll(str1, N1, str2, N2, locale);
|
||||
}
|
||||
|
||||
///
|
||||
/// Lexigraphically compare two strings
|
||||
///
|
||||
/// \param[in] str1 String 1
|
||||
/// \param[in] str2 String 2
|
||||
/// \param[in] locale C++ locale to use
|
||||
///
|
||||
/// \return Negative if str1<str2; positive if str1>str2; zero if str1==str2
|
||||
///
|
||||
template <class T>
|
||||
inline int strncoll(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str1,
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str2,
|
||||
_In_ const std::locale& locale)
|
||||
{
|
||||
return strncoll(str1.data(), str1.size(), str2.data(), str2.size(), locale);
|
||||
}
|
||||
|
||||
///
|
||||
/// Search for a substring
|
||||
///
|
||||
@ -1382,22 +1172,6 @@ namespace stdex
|
||||
return strnstr(str, N1, sample);
|
||||
}
|
||||
|
||||
///
|
||||
/// Search for a substring
|
||||
///
|
||||
/// \param[in] str String to search in
|
||||
/// \param[in] sample Substring to search for
|
||||
///
|
||||
/// \return Offset inside str where sample string is found; stdex::npos if not found
|
||||
///
|
||||
template <class T1, class T2>
|
||||
inline size_t strnstr(
|
||||
_In_ const std::basic_string_view<T1, std::char_traits<T1>> str,
|
||||
_In_z_ const T2* sample)
|
||||
{
|
||||
return strnstr(str.data(), str.size(), sample);
|
||||
}
|
||||
|
||||
///
|
||||
/// Search for a substring ASCII-case-insensitive
|
||||
///
|
||||
@ -1552,40 +1326,6 @@ namespace stdex
|
||||
return strnistr(str, N1, sample, locale);
|
||||
}
|
||||
|
||||
///
|
||||
/// Search for a substring ASCII-case-insensitive
|
||||
///
|
||||
/// \param[in] str String to search in
|
||||
/// \param[in] sample Substring to search for
|
||||
///
|
||||
/// \return Offset inside str where sample string is found; stdex::npos if not found
|
||||
///
|
||||
template <class T1, class T2>
|
||||
inline size_t strnistr(
|
||||
_In_ const std::basic_string_view<T1, std::char_traits<T1>> str,
|
||||
_In_z_ const T2* sample)
|
||||
{
|
||||
return strnistr(str.data(), str.size(), sample);
|
||||
}
|
||||
|
||||
///
|
||||
/// Search for a substring case-insensitive
|
||||
///
|
||||
/// \param[in] str String to search in
|
||||
/// \param[in] sample Substring to search for
|
||||
/// \param[in] locale C++ locale to use
|
||||
///
|
||||
/// \return Offset inside str where sample string is found; stdex::npos if not found
|
||||
///
|
||||
template <class T1, class T2>
|
||||
inline size_t strnistr(
|
||||
_In_ const std::basic_string_view<T1, std::char_traits<T1>> str,
|
||||
_In_z_ const T2* sample,
|
||||
_In_ const std::locale& locale)
|
||||
{
|
||||
return strnistr(str.data(), str.size(), sample, locale);
|
||||
}
|
||||
|
||||
///
|
||||
/// Copy zero-terminated string
|
||||
///
|
||||
@ -1794,22 +1534,6 @@ namespace stdex
|
||||
return strndup(str, N);
|
||||
}
|
||||
|
||||
///
|
||||
/// Returns duplicated string on the heap
|
||||
///
|
||||
/// In contrast with the stdlib C strdup, the memory is allocated using operator new T[].
|
||||
/// This allows returned string to be fed into std::unique_ptr<T> for auto release.
|
||||
///
|
||||
/// \param[in] str String to duplicate. Must be zero-terminated.
|
||||
///
|
||||
/// \return Pointer to duplicated string; or nullptr if str is nullptr. Use delete operator to free the memory.
|
||||
///
|
||||
template <class T>
|
||||
inline _Check_return_ _Ret_maybenull_z_ T* strndup(_In_ const std::basic_string_view<T, std::char_traits<T>> str)
|
||||
{
|
||||
return strndup(str.data(), str.size());
|
||||
}
|
||||
|
||||
///
|
||||
/// Convert CRLF to LF
|
||||
/// Source and destination strings may point to the same buffer for inline conversion.
|
||||
@ -2057,24 +1781,6 @@ namespace stdex
|
||||
return strtoint<T, T_bin>(str, N, end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for a signed integer
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[out] end On return, count of code units processed
|
||||
/// \param[in] radix Number radix (0 - autodetect; 2..36)
|
||||
///
|
||||
/// \return Binary integer value
|
||||
///
|
||||
template <class T, class T_bin>
|
||||
T_bin strtoint(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_Out_opt_ size_t* end,
|
||||
_In_ int radix)
|
||||
{
|
||||
return strtoint<T, T_bin>(str.data(), str.size(), end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for an unsigned integer
|
||||
///
|
||||
@ -2126,24 +1832,6 @@ namespace stdex
|
||||
return strtouint<T, T_bin>(str, N, end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for an unsigned integer
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[out] end On return, count of code units processed
|
||||
/// \param[in] radix Number radix (0 - autodetect; 2..36)
|
||||
///
|
||||
/// \return Binary integer value
|
||||
///
|
||||
template <class T, class T_bin>
|
||||
inline T_bin strtouint(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_Out_opt_ size_t* end,
|
||||
_In_ int radix)
|
||||
{
|
||||
return strtouint<T, T_bin>(str.data(), str.size(), end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for a signed 32-bit integer
|
||||
///
|
||||
@ -2181,24 +1869,6 @@ namespace stdex
|
||||
return strto32<T>(str, N, end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for a signed 32-bit integer
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[out] end On return, count of code units processed
|
||||
/// \param[in] radix Number radix (0 - autodetect; 2..36)
|
||||
///
|
||||
/// \return Binary integer value
|
||||
///
|
||||
template <class T>
|
||||
inline int32_t strto32(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_Out_opt_ size_t* end,
|
||||
_In_ int radix)
|
||||
{
|
||||
return strto32<T>(str.data(), str.size(), end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for a signed 64-bit integer
|
||||
///
|
||||
@ -2236,24 +1906,6 @@ namespace stdex
|
||||
return strto64<T>(str, N, end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for a signed 64-bit integer
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[out] end On return, count of code units processed
|
||||
/// \param[in] radix Number radix (0 - autodetect; 2..36)
|
||||
///
|
||||
/// \return Binary integer value
|
||||
///
|
||||
template <class T>
|
||||
inline int64_t strto64(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_Out_opt_ size_t* end,
|
||||
_In_ int radix)
|
||||
{
|
||||
return strto64<T>(str.data(), str.size(), end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for a signed 32/64-bit integer
|
||||
/// Dependent on platform CPU architecture
|
||||
@ -2297,25 +1949,6 @@ namespace stdex
|
||||
return strtoi<T>(str, N, end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for a signed 32/64-bit integer
|
||||
/// Dependent on platform CPU architecture
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[out] end On return, count of code units processed
|
||||
/// \param[in] radix Number radix (0 - autodetect; 2..36)
|
||||
///
|
||||
/// \return Binary integer value
|
||||
///
|
||||
template <class T>
|
||||
inline intptr_t strtoi(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_Out_opt_ size_t* end,
|
||||
_In_ int radix)
|
||||
{
|
||||
return strtoi<T>(str.data(), str.size(), end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for an unsigned 32-bit integer
|
||||
///
|
||||
@ -2353,24 +1986,6 @@ namespace stdex
|
||||
return strtou32(str, N, end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for an unsigned 32-bit integer
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[out] end On return, count of code units processed
|
||||
/// \param[in] radix Number radix (0 - autodetect; 2..36)
|
||||
///
|
||||
/// \return Binary integer value
|
||||
///
|
||||
template <class T>
|
||||
inline uint32_t strtou32(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_Out_opt_ size_t* end,
|
||||
_In_ int radix)
|
||||
{
|
||||
return strtou32(str.data(), str.size(), end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for an unsigned 64-bit integer
|
||||
///
|
||||
@ -2408,24 +2023,6 @@ namespace stdex
|
||||
return strtou64<T>(str, N, end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for an unsigned 64-bit integer
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[out] end On return, count of code units processed
|
||||
/// \param[in] radix Number radix (0 - autodetect; 2..36)
|
||||
///
|
||||
/// \return Binary integer value
|
||||
///
|
||||
template <class T>
|
||||
inline uint64_t strtou64(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_Out_opt_ size_t* end,
|
||||
_In_ int radix)
|
||||
{
|
||||
return strtou64<T>(str.data(), str.size(), end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for an unsigned 32/64-bit integer
|
||||
/// Dependent on platform CPU architecture
|
||||
@ -2469,25 +2066,6 @@ namespace stdex
|
||||
return strtoui<T>(str, N, end, radix);
|
||||
}
|
||||
|
||||
///
|
||||
/// Parse string for an unsigned 32/64-bit integer
|
||||
/// Dependent on platform CPU architecture
|
||||
///
|
||||
/// \param[in] str String
|
||||
/// \param[out] end On return, count of code units processed
|
||||
/// \param[in] radix Number radix (0 - autodetect; 2..36)
|
||||
///
|
||||
/// \return Binary integer value
|
||||
///
|
||||
template <class T>
|
||||
inline size_t strtoui(
|
||||
_In_ const std::basic_string_view<T, std::char_traits<T>> str,
|
||||
_Out_opt_ size_t* end,
|
||||
_In_ int radix)
|
||||
{
|
||||
return strtoui<T>(str.data(), str.size(), end, radix);
|
||||
}
|
||||
|
||||
/// \cond internal
|
||||
inline int vsnprintf(_Out_z_cap_(capacity) char* str, _In_ size_t capacity, _In_z_ _Printf_format_string_params_(2) const char* format, _In_opt_ locale_t locale, _In_ va_list arg)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user