]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dynarray.cpp
Call CreateControl instead of CreateBase
[wxWidgets.git] / src / common / dynarray.cpp
index 63a6dc76cfeb7b6dfdbf0ffa9d316af645862d0c..676bd6ba251b2382487c150b2d905c38ed7f8802 100644 (file)
@@ -35,7 +35,7 @@
 
 // we cast the value to long from which we cast it to void * in IndexForInsert:
 // this can't work if the pointers are not big enough
-wxCOMPILE_TIME_ASSERT( sizeof(long) <= sizeof(void *),
+wxCOMPILE_TIME_ASSERT( sizeof(wxUIntPtr) <= sizeof(void *),
                        wxArraySizeOfPtrLessSizeOfLong ); // < 32 symbols
 
 // ============================================================================
@@ -326,8 +326,8 @@ size_t name::IndexForInsert(T lItem, CMPFUNC fnCompare) const               \
   while ( lo < hi ) {                                                       \
     i = (lo + hi)/2;                                                        \
                                                                             \
-    res = (*fnCompare)((const void *)(long)lItem,                           \
-                       (const void *)(long)(m_pItems[i]));                  \
+    res = (*fnCompare)((const void *)(wxUIntPtr)lItem,                      \
+                       (const void *)(wxUIntPtr)(m_pItems[i]));             \
     if ( res < 0 )                                                          \
       hi = i;                                                               \
     else if ( res > 0 )                                                     \
@@ -347,9 +347,10 @@ int name::Index(T lItem, CMPFUNC fnCompare) const                           \
     size_t n = IndexForInsert(lItem, fnCompare);                            \
                                                                             \
     return (n >= m_nCount ||                                                \
-           (*fnCompare)((const void *)(long)lItem,                          \
-                        ((const void *)(long)m_pItems[n]))) ? wxNOT_FOUND   \
-                                                            : (int)n;       \
+           (*fnCompare)((const void *)(wxUIntPtr)lItem,                     \
+                        ((const void *)(wxUIntPtr)m_pItems[n])))            \
+                        ? wxNOT_FOUND                                       \
+                        : (int)n;                                           \
 }                                                                           \
                                                                             \
 /* removes item from array (by index) */                                    \
@@ -421,6 +422,7 @@ _WX_DEFINE_BASEARRAY(const void *, wxBaseArrayPtrVoid)
 _WX_DEFINE_BASEARRAY(short,        wxBaseArrayShort)
 _WX_DEFINE_BASEARRAY(int,          wxBaseArrayInt)
 _WX_DEFINE_BASEARRAY(long,         wxBaseArrayLong)
+_WX_DEFINE_BASEARRAY(size_t,       wxBaseArraySizeT)
 _WX_DEFINE_BASEARRAY(double,       wxBaseArrayDouble)
 
 #if wxUSE_STL
@@ -432,16 +434,38 @@ _WX_DEFINE_BASEARRAY(double,       wxBaseArrayDouble)
 
 _WX_DEFINE_BASEARRAY(wxString, wxBaseArrayStringBase);
 
-int wxArrayString::Index(const wxChar* sz, bool bCase, bool bFromEnd) const
+// some compilers (Sun CC being the only known example) distinguish between
+// extern "C" functions and the functions with C++ linkage and ptr_fun and
+// wxStringCompareLess can't take wxStrcmp/wxStricmp directly as arguments in
+// this case, we need the wrappers below to make this work
+inline int wxStrcmpCppWrapper(const wxChar *p, const wxChar *q)
+{
+    return wxStrcmp(p, q);
+}
+
+inline int wxStricmpCppWrapper(const wxChar *p, const wxChar *q)
+{
+    return wxStricmp(p, q);
+}
+
+int wxArrayString::Index(const wxChar* sz, bool bCase, bool WXUNUSED(bFromEnd)) const
 {
     wxArrayString::const_iterator it;
 
     if (bCase)
+    {
         it = std::find_if(begin(), end(),
-                          std::not1(std::bind2nd(std::ptr_fun(wxStrcmp), sz)));
-    else
+                          std::not1(
+                              std::bind2nd(
+                                  std::ptr_fun(wxStrcmpCppWrapper), sz)));
+    }
+    else // !bCase
+    {
         it = std::find_if(begin(), end(),
-                          std::not1(std::bind2nd(std::ptr_fun(wxStricmp), sz)));
+                          std::not1(
+                              std::bind2nd(
+                                  std::ptr_fun(wxStricmpCppWrapper), sz)));
+    }
 
     return it == end() ? wxNOT_FOUND : it - begin();
 }
@@ -458,16 +482,16 @@ private:
     fnc m_f;
 };
 
-int wxSortedArrayString::Index(const wxChar* sz, bool bCase, bool bFromEnd) const
+int wxSortedArrayString::Index(const wxChar* sz, bool bCase, bool WXUNUSED(bFromEnd)) const
 {
     wxSortedArrayString::const_iterator it;
 
     if (bCase)
         it = std::lower_bound(begin(), end(), sz,
-                              wxStringCompareLess(wxStrcmp));
+                              wxStringCompareLess(wxStrcmpCppWrapper));
     else
         it = std::lower_bound(begin(), end(), sz,
-                              wxStringCompareLess(wxStricmp));
+                              wxStringCompareLess(wxStricmpCppWrapper));
 
     if (it == end() || (bCase ? wxStrcmp : wxStricmp)(it->c_str(), sz) != 0)
         return wxNOT_FOUND;