From 2da2f941bbd25599c2c1453204b5f1a4e116ae91 Mon Sep 17 00:00:00 2001 From: Mattia Barbon Date: Sat, 19 Jul 2003 22:01:14 +0000 Subject: [PATCH] Fix wx[Sorted]ArrayString::Index when wxUSE_STL=1, because it is different than wxArray::Index (second argument is for case sensitivity, not search direction). Use forward declaration for wx[Sorted]ArrayString, where possible. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22128 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/arrstr.h | 4 +++ include/wx/confbase.h | 3 ++- include/wx/dir.h | 5 ++-- include/wx/generic/grid.h | 1 + include/wx/generic/gridctrl.h | 1 + include/wx/generic/statusbr.h | 1 + include/wx/utils.h | 3 ++- src/common/dynarray.cpp | 48 ++++++++++++++++++++++++++++++++++- src/generic/choicdgg.cpp | 1 + src/gtk/choice.cpp | 1 + src/gtk/listbox.cpp | 4 ++- src/gtk1/choice.cpp | 1 + src/gtk1/listbox.cpp | 4 ++- 13 files changed, 70 insertions(+), 7 deletions(-) diff --git a/include/wx/arrstr.h b/include/wx/arrstr.h index d46e291df5..de3508e9c8 100644 --- a/include/wx/arrstr.h +++ b/include/wx/arrstr.h @@ -38,6 +38,8 @@ class WXDLLIMPEXP_BASE wxArrayString : public wxArrayStringBase public: wxArrayString() { } wxArrayString(const wxArrayString& a) : wxArrayStringBase(a) { } + + int Index(const wxChar* sz, bool bCase = true, bool bFromEnd = false) const; }; class WXDLLIMPEXP_BASE wxSortedArrayString : public wxSortedArrayStringBase @@ -56,6 +58,8 @@ public: for ( size_t n = 0; n < src.size(); n++ ) Add(src[n]); } + + int Index(const wxChar* sz, bool bCase = true, bool bFromEnd = false) const; }; #else // if !wxUSE_STL diff --git a/include/wx/confbase.h b/include/wx/confbase.h index 503247fd56..16b7ba3a88 100644 --- a/include/wx/confbase.h +++ b/include/wx/confbase.h @@ -20,7 +20,8 @@ #include "wx/defs.h" #include "wx/string.h" -#include "wx/arrstr.h" + +class WXDLLIMPEXP_BASE wxArrayString; // ---------------------------------------------------------------------------- // constants diff --git a/include/wx/dir.h b/include/wx/dir.h index 7cb355ff5b..0d68eb59fb 100644 --- a/include/wx/dir.h +++ b/include/wx/dir.h @@ -17,10 +17,11 @@ #endif #ifndef WX_PRECOMP - #include "wx/string.h" - #include "wx/arrstr.h" + #include "wx/string.h" #endif +class WXDLLIMPEXP_BASE wxArrayString; + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index 5f4aa749af..05451555f0 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -22,6 +22,7 @@ #include "wx/panel.h" #include "wx/scrolwin.h" #include "wx/string.h" +#include "wx/arrstr.h" #include "wx/scrolbar.h" #include "wx/event.h" #include "wx/combobox.h" diff --git a/include/wx/generic/gridctrl.h b/include/wx/generic/gridctrl.h index b607c32607..5df562eb3c 100644 --- a/include/wx/generic/gridctrl.h +++ b/include/wx/generic/gridctrl.h @@ -20,6 +20,7 @@ #include "wx/grid.h" #include "wx/string.h" +#include "wx/arrstr.h" #include "wx/datetime.h" #define wxGRID_VALUE_CHOICEINT _T("choiceint") diff --git a/include/wx/generic/statusbr.h b/include/wx/generic/statusbr.h index 9b07b71469..f203e174d6 100644 --- a/include/wx/generic/statusbr.h +++ b/include/wx/generic/statusbr.h @@ -19,6 +19,7 @@ #include "wx/pen.h" #include "wx/font.h" #include "wx/statusbr.h" +#include "wx/arrstr.h" WXDLLEXPORT_DATA(extern const wxChar*) wxPanelNameStr; diff --git a/include/wx/utils.h b/include/wx/utils.h index 988754c1b6..a6582b7679 100644 --- a/include/wx/utils.h +++ b/include/wx/utils.h @@ -23,7 +23,8 @@ #include "wx/object.h" #include "wx/list.h" #include "wx/filefn.h" -#include "wx/arrstr.h" + +class WXDLLIMPEXP_BASE wxArrayString; // need this for wxGetDiskSpace() as we can't, unfortunately, forward declare // wxLongLong diff --git a/src/common/dynarray.cpp b/src/common/dynarray.cpp index 63d9e7b5ca..9933c0bc75 100644 --- a/src/common/dynarray.cpp +++ b/src/common/dynarray.cpp @@ -426,6 +426,52 @@ _WX_DEFINE_BASEARRAY(double, wxBaseArrayDouble) #if wxUSE_STL #include "wx/arrstr.h" -_WX_DEFINE_BASEARRAY(wxString, wxBaseArrayStringBase) +#include "wx/beforestd.h" +#include +#include "wx/afterstd.h" + +_WX_DEFINE_BASEARRAY(wxString, wxBaseArrayStringBase); + +int wxArrayString::Index(const wxChar* sz, bool bCase, bool bFromEnd) const +{ + wxArrayString::const_iterator it; + + if (bCase) + it = std::find_if(begin(), end(), + std::not1(std::bind2nd(std::ptr_fun(wxStrcmp), sz))); + else + it = std::find_if(begin(), end(), + std::not1(std::bind2nd(std::ptr_fun(wxStricmp), sz))); + + return it == end() ? wxNOT_FOUND : it - begin(); +} + +class wxStringCompareLess +{ +public: + typedef int (wxCMPFUNC_CONV * fnc)(const wxChar*, const wxChar*); +public: + wxStringCompareLess(fnc f) : m_f(f) { } + bool operator()(const wxChar* s1, const wxChar* s2) + { return m_f(s1, s2) < 0; } +private: + fnc m_f; +}; + +int wxSortedArrayString::Index(const wxChar* sz, bool bCase, bool bFromEnd) const +{ + wxSortedArrayString::const_iterator it; + + if (bCase) + it = std::lower_bound(begin(), end(), sz, + wxStringCompareLess(wxStrcmp)); + else + it = std::lower_bound(begin(), end(), sz, + wxStringCompareLess(wxStricmp)); + + if (it == end() || (bCase ? wxStrcmp : wxStricmp)(it->c_str(), sz) != 0) + return wxNOT_FOUND; + return it - begin(); +} #endif diff --git a/src/generic/choicdgg.cpp b/src/generic/choicdgg.cpp index 1c270386e1..695b283eef 100644 --- a/src/generic/choicdgg.cpp +++ b/src/generic/choicdgg.cpp @@ -39,6 +39,7 @@ #include "wx/stattext.h" #include "wx/intl.h" #include "wx/sizer.h" + #include "wx/arrstr.h" #endif #if wxUSE_STATLINE diff --git a/src/gtk/choice.cpp b/src/gtk/choice.cpp index 05b88cc2ae..5cda4d6808 100644 --- a/src/gtk/choice.cpp +++ b/src/gtk/choice.cpp @@ -17,6 +17,7 @@ #if wxUSE_CHOICE #include "wx/choice.h" +#include "wx/arrstr.h" #include "wx/gtk/private.h" diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index fc1783f954..e9540a1e44 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -12,11 +12,13 @@ #pragma implementation "listbox.h" #endif -#include "wx/listbox.h" +#include "wx/defs.h" #if wxUSE_LISTBOX +#include "wx/listbox.h" #include "wx/dynarray.h" +#include "wx/arrstr.h" #include "wx/utils.h" #include "wx/intl.h" #include "wx/checklst.h" diff --git a/src/gtk1/choice.cpp b/src/gtk1/choice.cpp index 05b88cc2ae..5cda4d6808 100644 --- a/src/gtk1/choice.cpp +++ b/src/gtk1/choice.cpp @@ -17,6 +17,7 @@ #if wxUSE_CHOICE #include "wx/choice.h" +#include "wx/arrstr.h" #include "wx/gtk/private.h" diff --git a/src/gtk1/listbox.cpp b/src/gtk1/listbox.cpp index fc1783f954..e9540a1e44 100644 --- a/src/gtk1/listbox.cpp +++ b/src/gtk1/listbox.cpp @@ -12,11 +12,13 @@ #pragma implementation "listbox.h" #endif -#include "wx/listbox.h" +#include "wx/defs.h" #if wxUSE_LISTBOX +#include "wx/listbox.h" #include "wx/dynarray.h" +#include "wx/arrstr.h" #include "wx/utils.h" #include "wx/intl.h" #include "wx/checklst.h" -- 2.45.2