From 383157e7438870730f52e0abe695be95f14a358b Mon Sep 17 00:00:00 2001 From: uz Date: Mon, 11 Jun 2012 18:16:17 +0000 Subject: [PATCH] Size optimizations. git-svn-id: svn://svn.cc65.org/cc65/trunk@5714 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/common/qsort.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) 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); -- 2.39.5