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(