From: uz Date: Mon, 11 Jun 2012 18:16:17 +0000 (+0000) Subject: Size optimizations. X-Git-Tag: V2.14~354 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=383157e7438870730f52e0abe695be95f14a358b;p=cc65 Size optimizations. git-svn-id: svn://svn.cc65.org/cc65/trunk@5714 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/common/qsort.c b/libsrc/common/qsort.c index 0cdfeb82c..e05fdfc35 100644 --- a/libsrc/common/qsort.c +++ b/libsrc/common/qsort.c @@ -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);