Allow comparing wxString with wide strings in non-Unicode build

This fixes a compilation error in wxMSW private fonts support
implementation, which compares wxString with a wide string but, unlike a
local fix there, makes sense more broadly and should reduce the
likelihood of similar errors in the future.

It also makes comparisons with narrow C strings more efficient in the
default, Unicode, build by using wxString::Cmp() method instead of
creating a temporary wxString, as was done before.

See #18172.
This commit is contained in:
Vadim Zeitlin
2018-07-21 14:03:47 +02:00
parent 2fc20abbdd
commit d390bee8a2

View File

@@ -3839,9 +3839,11 @@ public:
// wxString comparison functions: operator versions are always case sensitive // wxString comparison functions: operator versions are always case sensitive
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// comparison with C-style narrow and wide strings.
#define wxCMP_WXCHAR_STRING(p, s, op) 0 op s.Cmp(p) #define wxCMP_WXCHAR_STRING(p, s, op) 0 op s.Cmp(p)
wxDEFINE_ALL_COMPARISONS(const wxChar *, const wxString&, wxCMP_WXCHAR_STRING) wxDEFINE_ALL_COMPARISONS(const wchar_t *, const wxString&, wxCMP_WXCHAR_STRING)
wxDEFINE_ALL_COMPARISONS(const char *, const wxString&, wxCMP_WXCHAR_STRING)
#undef wxCMP_WXCHAR_STRING #undef wxCMP_WXCHAR_STRING
@@ -3930,17 +3932,6 @@ inline bool wxString::iterator::operator<=(const const_iterator& i) const
inline bool wxString::iterator::operator>=(const const_iterator& i) const inline bool wxString::iterator::operator>=(const const_iterator& i) const
{ return i <= *this; } { return i <= *this; }
// comparison with C string in Unicode build
#if wxUSE_UNICODE
#define wxCMP_CHAR_STRING(p, s, op) wxString(p) op s
wxDEFINE_ALL_COMPARISONS(const char *, const wxString&, wxCMP_CHAR_STRING)
#undef wxCMP_CHAR_STRING
#endif // wxUSE_UNICODE
// we also need to provide the operators for comparison with wxCStrData to // we also need to provide the operators for comparison with wxCStrData to
// resolve ambiguity between operator(const wxChar *,const wxString &) and // resolve ambiguity between operator(const wxChar *,const wxString &) and
// operator(const wxChar *, const wxChar *) for "p == s.c_str()" // operator(const wxChar *, const wxChar *) for "p == s.c_str()"