]> git.sur5r.net Git - cc65/commitdiff
Size optimizations.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 11 Jun 2012 18:16:17 +0000 (18:16 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 11 Jun 2012 18:16:17 +0000 (18:16 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5714 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/qsort.c

index 0cdfeb82c089560c49b1a214d18e90c3be27c97c..e05fdfc3597304fdf755bf609d940b8ff5130c5f 100644 (file)
@@ -10,7 +10,8 @@
 
 
 
-static void QuickSort (void* Base, int Lo, int Hi, size_t Size,
+static void QuickSort (register unsigned char* Base, int Lo, int Hi,
+                       register size_t Size,
                       int (*Compare)(const void*, const void*))
 /* Internal recursive function. Works with ints, but this shouldn't be
  * a problem.
@@ -18,28 +19,25 @@ static void QuickSort (void* Base, int Lo, int Hi, size_t Size,
 {
     int I, J;
 
-    /* Get a char pointer */
-    unsigned char* B = Base;
-
     /* Quicksort */
     while (Hi > Lo) {
        I = Lo + Size;
        J = Hi;
        while (I <= J) {
-           while (I <= J && Compare (B + Lo, B + I) >= 0) {
+           while (I <= J && Compare (Base + Lo, Base + I) >= 0) {
                I += Size;
            }
-           while (I <= J && Compare (B + Lo, B + J) < 0) {
+           while (I <= J && Compare (Base + Lo, Base + J) < 0) {
                J -= Size;
            }
            if (I <= J) {
-               _swap (B + I, B + J, Size);
+               _swap (Base + I, Base + J, Size);
                I += Size;
                J -= Size;
            }
        }
        if (J != Lo) {
-           _swap (B + J, B + Lo, Size);
+           _swap (Base + J, Base + Lo, Size);
        }
                if (((unsigned) J) * 2 > (Hi + Lo)) {
            QuickSort (Base, J + Size, Hi, Size, Compare);