]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/list.h
Removed checklistbox test
[wxWidgets.git] / include / wx / list.h
index 62d6c44aa0eb913ad2c46a7d4c1dcb714ff59a70..cb7023d3b7678dedb56243a12c03f3f7c91b3bbb 100644 (file)
@@ -98,31 +98,64 @@ enum wxKeyType
 #define WX_DECLARE_LIST_WITH_DECL(elT, liT, decl) \
     WX_DECLARE_LIST_XO(elT*, liT, decl)
 
+#if !defined( __VISUALC__ )
+
+template<class T>
+class WXDLLIMPEXP_BASE wxList_SortFunction
+{
+public:
+    wxList_SortFunction(wxSortCompareFunction f) : m_f(f) { }
+    bool operator()(const T& i1, const T& i2)
+      { return m_f((T*)&i1, (T*)&i2) < 0; }
+private:
+    wxSortCompareFunction m_f;
+};
+
+#define WX_LIST_SORTFUNCTION( elT, f ) wxList_SortFunction<elT>(f)
+#define VC6_WORKAROUND(elT, liT, decl)
+
+#else // if defined( __VISUALC__ )
+
+#define WX_LIST_SORTFUNCTION( elT, f ) std::greater<elT>( f )
+#define VC6_WORKAROUND(elT, liT, decl)                                        \
+    decl liT;                                                                 \
+                                                                              \
+    /* Workaround for broken VC6 STL incorrectly requires a std::greater<> */ \
+    /* to be passed into std::list::sort() */                                 \
+    template <>                                                               \
+    struct std::greater<elT>                                                  \
+    {                                                                         \
+        private:                                                              \
+            wxSortCompareFunction m_CompFunc;                                 \
+        public:                                                               \
+            greater( wxSortCompareFunction compfunc = NULL )                  \
+                : m_CompFunc( compfunc ) {}                                   \
+            bool operator()(const elT X, const elT Y) const                   \
+                {                                                             \
+                    return m_CompFunc ?                                       \
+                        ( m_CompFunc( X, Y ) < 0 ) :                          \
+                        ( X > Y );                                            \
+                }                                                             \
+    };
+
+#endif // defined( __VISUALC__ )
+
 #define WX_DECLARE_LIST_XO(elT, liT, decl)                                    \
+    VC6_WORKAROUND(elT, liT, decl)                                            \
     decl liT : public std::list<elT>                                          \
     {                                                                         \
     private:                                                                  \
         bool m_destroy;                                                       \
     private:                                                                  \
-        class SortCompareFunction                                             \
-        {                                                                     \
-        private:                                                              \
-            wxSortCompareFunction m_CompFunc;                                 \
-        public:                                                               \
-            SortCompareFunction( wxSortCompareFunction compfunc )             \
-                : m_CompFunc( compfunc ) {}                                   \
-            bool operator()( const elT X, const elT Y ) const                 \
-                { return ( m_CompFunc( X, Y ) < 0 ); }                        \
-        };                                                                    \
-                                                                              \
         typedef elT _WX_LIST_ITEM_TYPE_##liT;                                 \
         static void DeleteFunction( const _WX_LIST_ITEM_TYPE_##liT X );       \
     public:                                                                   \
         class compatibility_iterator                                          \
         {                                                                     \
         private:                                                              \
-            typedef liT::iterator iterator;                                   \
-            friend class liT;                                                 \
+          /* Workaround for broken VC6 nested class name resolution */        \
+          typedef std::list<elT>::iterator iterator;                          \
+          friend class liT;                                                   \
         private:                                                              \
             iterator m_iter;                                                  \
             liT * m_list;                                                     \
@@ -259,10 +292,9 @@ enum wxKeyType
                 std::for_each( begin(), end(), DeleteFunction );              \
             clear();                                                          \
         }                                                                     \
-                                                                              \
+        /* Workaround for broken VC6 std::list::sort() see above */           \
         void Sort( wxSortCompareFunction compfunc )                           \
-            { sort( SortCompareFunction( compfunc ) ); }                      \
-                                                                              \
+            { sort( WX_LIST_SORTFUNCTION( elT, compfunc ) ); }                \
         ~liT() { Clear(); }                                                   \
     }
 
@@ -1170,9 +1202,9 @@ private:
 
 #else // if wxUSE_STL
 
-WX_DECLARE_LIST_XO(wxString, wxStringListBase, class WXDLLEXPORT);
+WX_DECLARE_LIST_XO(wxString, wxStringListBase, class WXDLLIMPEXP_BASE);
 
-class WXDLLEXPORT wxStringList : public wxStringListBase
+class WXDLLIMPEXP_BASE wxStringList : public wxStringListBase
 {
 public:
     compatibility_iterator Append(wxChar* s)