X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6363458bcaa117298305fc220069092c7a42b48..b02dd12239c8a59b9a545d9fcb04974f8ad02c6b:/include/wx/vector.h?ds=sidebyside diff --git a/include/wx/vector.h b/include/wx/vector.h index 5375f9c5df..e95d4103ef 100644 --- a/include/wx/vector.h +++ b/include/wx/vector.h @@ -14,12 +14,19 @@ #include "wx/defs.h" -#if wxUSE_STL +#if wxUSE_STD_CONTAINERS #include +#include + #define wxVector std::vector +template +inline void wxVectorSort(wxVector& v) +{ + std::sort(v.begin(), v.end()); +} -#else // !wxUSE_STL +#else // !wxUSE_STD_CONTAINERS #include "wx/utils.h" #include "wx/scopeguard.h" @@ -111,7 +118,10 @@ private: // Note that we use typedef instead of privately deriving from this (which // would allowed us to omit "Ops::" prefixes below) to keep VC6 happy, // it can't compile code that derives from wxIf<...>::value. - typedef typename wxIf< wxIsMovable::value, + // + // Note that bcc needs the extra parentheses for non-type template + // arguments to compile this expression. + typedef typename wxIf< (wxIsMovable::value), wxPrivate::wxVectorMemOpsMovable, wxPrivate::wxVectorMemOpsGeneric >::value Ops; @@ -195,6 +205,13 @@ public: clear(); } + void swap(wxVector& v) + { + wxSwap(m_size, v.m_size); + wxSwap(m_capacity, v.m_capacity); + wxSwap(m_values, v.m_values); + } + void clear() { // call destructors of stored objects: @@ -430,7 +447,45 @@ inline typename wxVector::size_type wxVector::erase(size_type n) } #endif // WXWIN_COMPATIBILITY_2_8 -#endif // wxUSE_STL/!wxUSE_STL + + +namespace wxPrivate +{ + +// This is a helper for the wxVectorSort function, and should not be used +// directly in user's code. +template +struct wxVectorComparator +{ + static int + Compare(const void* pitem1, const void* pitem2, const void* ) + { + const T& item1 = *reinterpret_cast(pitem1); + const T& item2 = *reinterpret_cast(pitem2); + + if (item1 < item2) + return -1; + else if (item2 < item1) + return 1; + else + return 0; + } +}; + +} // namespace wxPrivate + + + +template +void wxVectorSort(wxVector& v) +{ + wxQsort(v.begin(), v.size(), sizeof(T), + wxPrivate::wxVectorComparator::Compare, NULL); +} + + + +#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS #if WXWIN_COMPATIBILITY_2_8 #define WX_DECLARE_VECTORBASE(obj, cls) typedef wxVector cls