From 27d10344d9c755336d11556f57360c12e306df9b Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Wed, 12 Jul 2023 13:57:13 +0200 Subject: [PATCH] string: Add strncoll Signed-off-by: Simon Rozman --- include/stdex/string.hpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/include/stdex/string.hpp b/include/stdex/string.hpp index 0176ca92a..eb2932f83 100644 --- a/include/stdex/string.hpp +++ b/include/stdex/string.hpp @@ -275,7 +275,7 @@ namespace stdex /// \param[in] str2 String 2 /// \param[in] count2 String 2 code unit count limit /// - /// \return -1 if str1str2; 0 if str1==str2 + /// \return Negative if str1str2; zero if str1==str2 /// template inline int strncmp( @@ -294,6 +294,28 @@ namespace stdex return 0; } + /// + /// Lexigraphically compare two strings + /// + /// \param[in] str1 String 1 + /// \param[in] count1 String 1 code unit count limit + /// \param[in] str2 String 2 + /// \param[in] count2 String 2 code unit count limit + /// + /// \return Negative if str1str2; zero if str1==str2 + /// + template + inline int strncoll( + _In_reads_or_z_opt_(count1) const T* str1, _In_ size_t count1, + _In_reads_or_z_opt_(count2) const T* str2, _In_ size_t count2, + _In_ const std::locale& locale) + { + assert(str1 || !count1); + assert(str2 || !count2); + auto& collate = std::use_facet>(locale); + return collate.compare(str1, str1 + count1, str2, str2 + count2); + } + /// /// Binary compare two strings case-insensitive /// @@ -302,7 +324,7 @@ namespace stdex /// \param[in] str2 String 2 /// \param[in] count2 String 2 code unit count limit /// - /// \return -1 if str1str2; 0 if str1==str2 + /// \return Negative if str1str2; zero if str1==str2 /// template inline int strnicmp(