]> pd.if.org Git - pdclib/blobdiff - functions/stdlib/qsort.c
Comment cleanups.
[pdclib] / functions / stdlib / qsort.c
index 6bb636f5631d5c50a51f9052c9b947f61507fb49..b654c309ccae1493aaf87efc0aaecd4a231555cd 100644 (file)
@@ -1,5 +1,3 @@
-/* $Id$ */
-
 /* qsort( void *, size_t, size_t, int(*)( const void *, const void * ) )
 
    This file is part of the Public Domain C Library (PDCLib).
@@ -34,21 +32,24 @@ static inline void memswp( char * i, char * j, size_t size )
 #define PREPARE_STACK char * stack[STACKSIZE]; char * * stackptr = stack
 #define PUSH( base, limit ) stackptr[0] = base; stackptr[1] = limit; stackptr += 2
 #define POP( base, limit ) stackptr -= 2; base = stackptr[0]; limit = stackptr[1]
-/* TODO: This is platform-dependent */
-#define STACKSIZE 40
+/* TODO: Stack usage is log2( nmemb ) (minus what T shaves off the worst case).
+         Worst-case nmemb is platform dependent and should probably be 
+         configured through _PDCLIB_config.h.
+*/
+#define STACKSIZE 64
 
 void qsort( void * base, size_t nmemb, size_t size, int (*compar)( const void *, const void * ) )
 {
     char * i;
     char * j;
-    _PDCLIB_ptrdiff_t thresh  = T * size;
-    char * base_              = (char *)base;
-    char * limit              = base_ + nmemb * size;
+    _PDCLIB_size_t thresh = T * size;
+    char * base_          = (char *)base;
+    char * limit          = base_ + nmemb * size;
     PREPARE_STACK;
 
     for ( ;; )
     {
-        if ( limit - base_ > thresh ) /* QSort for more than T elements. */
+        if ( (size_t)( limit - base_ ) > thresh ) /* QSort for more than T elements. */
         {
             /* We work from second to last - first will be pivot element. */
             i = base_ + size;