Use string sort order with CompareString() in wxString::CmpNoCase().
Using the default word sort order may fail to define a strict weak order using this function, thus breaking algorithms such as std::sort which rely on its properties. It's also more consistent with the fallback manual implementation. Closes #10375. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63941 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1079,9 +1079,15 @@ size_t wxString::find_last_not_of(const wxOtherCharType* sz, size_t nStart,
|
|||||||
int wxString::CmpNoCase(const wxString& s) const
|
int wxString::CmpNoCase(const wxString& s) const
|
||||||
{
|
{
|
||||||
#if defined(__WXMSW__) && !wxUSE_UNICODE_UTF8
|
#if defined(__WXMSW__) && !wxUSE_UNICODE_UTF8
|
||||||
// prefer to use CompareString() if available as it's more efficient than
|
// Prefer to use CompareString() if available as it's more efficient than
|
||||||
// doing it manual or even using wxStricmp() (see #10375)
|
// doing it manually or even using wxStricmp() (see #10375)
|
||||||
switch ( ::CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE,
|
//
|
||||||
|
// Also note that not using NORM_STRINGSORT may result in not having a
|
||||||
|
// strict weak ordering (e.g. s1 < s2 and s2 < s3 but s3 < s1) and so break
|
||||||
|
// algorithms such as std::sort that rely on it. It's also more consistent
|
||||||
|
// with the fall back version below.
|
||||||
|
switch ( ::CompareString(LOCALE_USER_DEFAULT,
|
||||||
|
NORM_IGNORECASE | SORT_STRINGSORT,
|
||||||
m_impl.c_str(), m_impl.length(),
|
m_impl.c_str(), m_impl.length(),
|
||||||
s.m_impl.c_str(), s.m_impl.length()) )
|
s.m_impl.c_str(), s.m_impl.length()) )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user