It doesn't make sense to require passing C functions to wxQsort() that we
define in a C++ library. We also don't need any special calling convention
here.
Notice that the only existing uses of wxQsort() inside wxWidgets itself were
not actually extern "C" and one of them didn't even use the correct calling
convention.
Also avoid using non-wx-prefixed CMPFUNCDATA identifier in a public header,
rename it to wxSortCallback instead.
Finally make wxQsort() documentation slightly more useful.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69566
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
-extern "C"
-{
-typedef int (wxCMPFUNC_CONV *CMPFUNCDATA)(const void* pItem1, const void* pItem2, const void* user_data);
-}
+typedef int (*wxSortCallback)(const void* pItem1,
+ const void* pItem2,
+ const void* user_data);
-WXDLLIMPEXP_BASE void wxQsort(void *const pbase, size_t total_elems,
- size_t size, CMPFUNCDATA cmp, const void* user_data);
+WXDLLIMPEXP_BASE void wxQsort(void* pbase, size_t total_elems,
+ size_t size, wxSortCallback cmp,
+ const void* user_data);
#if wxUSE_GUI // GUI only things from now on
template<typename T>
struct wxVectorComparator
{
- static int wxCMPFUNC_CONV
+ static int
Compare(const void* pitem1, const void* pitem2, const void* )
{
const T& item1 = *reinterpret_cast<const T*>(pitem1);
@header{wx/utils.h}
*/
-extern "C"
-{
-typedef int (wxCMPFUNC_CONV *CMPFUNCDATA)(const void* pItem1, const void* pItem2, const void* user_data);
-}
+typedef int (*wxSortCallback)(const void* pItem1, const void* pItem2, const void* user_data);
/**
- Function for performing a qsort operation including a user data
- parameter.
+ Function implementing quick sort algorithm.
+
+ This function sorts @a total_elems objects of size @a size located at @a
+ pbase. It uses @a cmp function for comparing them and passes @a user_data
+ pointer to the comparison function each time it's called.
@header{wx/utils.h}
*/
-void wxQsort(void *const pbase, size_t total_elems,
- size_t size, CMPFUNCDATA cmp, const void* user_data);
+void wxQsort(void* pbase, size_t total_elems,
+ size_t size, wxSortCallback cmp, const void* user_data);
/**
stack size is needed (actually O(1) in this case)! */
void wxQsort(void *const pbase, size_t total_elems,
- size_t size, CMPFUNCDATA cmp, const void* user_data)
+ size_t size, wxSortCallback cmp, const void* user_data)
{
register char *base_ptr = (char *) pbase;
const size_t max_thresh = MAX_THRESH * size;