#include <vector>
#define wxVector std::vector
+template<typename T>
+inline void wxVectorSort(wxVector<T>& v)
+{
+ std::sort(v.begin(), v.end());
+}
#else // !wxUSE_STL
}
#endif // WXWIN_COMPATIBILITY_2_8
+
+
+namespace wxPrivate
+{
+ // This function is a helper for the wxVectorSort function, and should
+ // not be used directly in user's code.
+
+template<typename T>
+int wxVectorSort_compare(const void* pitem1, const void* pitem2, const void* )
+{
+ const T& item1 = *reinterpret_cast<const T*>(pitem1);
+ const T& item2 = *reinterpret_cast<const T*>(pitem2);
+
+ if (item1 < item2)
+ return -1;
+ else if (item2 < item1)
+ return 1;
+ else
+ return 0;
+}
+
+} // namespace wxPrivate
+
+
+
+template<typename T>
+void wxVectorSort(wxVector<T>& v)
+{
+ wxQsort(v.begin(), v.size(), sizeof(T),
+ wxPrivate::wxVectorSort_compare<T>, NULL);
+}
+
+
+
#endif // wxUSE_STL/!wxUSE_STL
#if WXWIN_COMPATIBILITY_2_8
@nolibrary
@category{containers}
- @see @ref overview_container, wxList<T>, wxArray<T>
+ @see @ref overview_container, wxList<T>, wxArray<T>, wxVectorSort<T>
*/
template<typename T>
class wxVector<T>
size_type size() const;
};
+
+/**
+ Sort the contents of a @c wxVector<T>. In a STL build this function will
+ be defined as a thin wrapper around std::sort. To be sortable the
+ contained type must support the less-than operator.
+
+ @code
+ wxVector<SomeClass> v;
+ ... // items are added to the vector v...
+ wxVectorSort(v);
+ @endcode
+
+ @see wxVector<T>
+*/
+template<typename T>
+void wxVectorSort(wxVector<T>& v);
CPPUNIT_TEST( NonPODs );
CPPUNIT_TEST( Resize );
CPPUNIT_TEST( Swap );
+ CPPUNIT_TEST( Sort );
CPPUNIT_TEST_SUITE_END();
void PushPopTest();
void NonPODs();
void Resize();
void Swap();
+ void Sort();
DECLARE_NO_COPY_CLASS(VectorsTestCase)
};
CPPUNIT_ASSERT( v1.empty() );
}
+
+void VectorsTestCase::Sort()
+{
+ size_t idx;
+ wxVector<int> v;
+
+ v.push_back(5);
+ v.push_back(7);
+ v.push_back(2);
+ v.push_back(9);
+ v.push_back(4);
+ v.push_back(1);
+ v.push_back(3);
+ v.push_back(8);
+ v.push_back(0);
+ v.push_back(6);
+
+ wxVectorSort(v);
+
+ for (idx=1; idx<v.size(); idx++)
+ {
+ CPPUNIT_ASSERT( v[idx-1] <= v[idx] );
+ }
+}