comparison src/stdlib/SDL_qsort.c @ 1336:3692456e7b0f

Use SDL_ prefixed versions of C library functions. FIXME: Change #include <stdlib.h> to #include "SDL_stdlib.h" Change #include <string.h> to #include "SDL_string.h" Make sure nothing else broke because of this...
author Sam Lantinga <slouken@libsdl.org>
date Tue, 07 Feb 2006 06:59:48 +0000
parents 1cbaeee565b1
children c687f06c7473
comparison
equal deleted inserted replaced
1335:c39265384763 1336:3692456e7b0f
231 test+=size; \ 231 test+=size; \
232 if (test!=first) { \ 232 if (test!=first) { \
233 /* Shift everything in [test,first) \ 233 /* Shift everything in [test,first) \
234 * up by one, and place |first| \ 234 * up by one, and place |first| \
235 * where |test| is. */ \ 235 * where |test| is. */ \
236 memcpy(pivot,first,size); \ 236 SDL_memcpy(pivot,first,size); \
237 memmove(test+size,test,first-test); \ 237 SDL_memmove(test+size,test,first-test); \
238 memcpy(test,pivot,size); \ 238 SDL_memcpy(test,pivot,size); \
239 } \ 239 } \
240 } 240 }
241 241
242 #define SWAP_nonaligned(a,b) { \ 242 #define SWAP_nonaligned(a,b) { \
243 register char *aa=(a),*bb=(b); \ 243 register char *aa=(a),*bb=(b); \
296 int (*compare)(const void *, const void *)) { 296 int (*compare)(const void *, const void *)) {
297 297
298 stack_entry stack[STACK_SIZE]; 298 stack_entry stack[STACK_SIZE];
299 int stacktop=0; 299 int stacktop=0;
300 char *first,*last; 300 char *first,*last;
301 char *pivot=malloc(size); 301 char *pivot=SDL_malloc(size);
302 size_t trunc=TRUNC_nonaligned*size; 302 size_t trunc=TRUNC_nonaligned*size;
303 assert(pivot!=0); 303 assert(pivot!=0);
304 304
305 first=(char*)base; last=first+(nmemb-1)*size; 305 first=(char*)base; last=first+(nmemb-1)*size;
306 306
308 char *ffirst=first, *llast=last; 308 char *ffirst=first, *llast=last;
309 while (1) { 309 while (1) {
310 /* Select pivot */ 310 /* Select pivot */
311 { char * mid=first+size*((last-first)/size >> 1); 311 { char * mid=first+size*((last-first)/size >> 1);
312 Pivot(SWAP_nonaligned,size); 312 Pivot(SWAP_nonaligned,size);
313 memcpy(pivot,mid,size); 313 SDL_memcpy(pivot,mid,size);
314 } 314 }
315 /* Partition. */ 315 /* Partition. */
316 Partition(SWAP_nonaligned,size); 316 Partition(SWAP_nonaligned,size);
317 /* Prepare to recurse/iterate. */ 317 /* Prepare to recurse/iterate. */
318 Recurse(trunc) 318 Recurse(trunc)
319 } 319 }
320 } 320 }
321 PreInsertion(SWAP_nonaligned,TRUNC_nonaligned,size); 321 PreInsertion(SWAP_nonaligned,TRUNC_nonaligned,size);
322 Insertion(SWAP_nonaligned); 322 Insertion(SWAP_nonaligned);
323 free(pivot); 323 SDL_free(pivot);
324 } 324 }
325 325
326 static void qsort_aligned(void *base, size_t nmemb, size_t size, 326 static void qsort_aligned(void *base, size_t nmemb, size_t size,
327 int (*compare)(const void *, const void *)) { 327 int (*compare)(const void *, const void *)) {
328 328
329 stack_entry stack[STACK_SIZE]; 329 stack_entry stack[STACK_SIZE];
330 int stacktop=0; 330 int stacktop=0;
331 char *first,*last; 331 char *first,*last;
332 char *pivot=malloc(size); 332 char *pivot=SDL_malloc(size);
333 size_t trunc=TRUNC_aligned*size; 333 size_t trunc=TRUNC_aligned*size;
334 assert(pivot!=0); 334 assert(pivot!=0);
335 335
336 first=(char*)base; last=first+(nmemb-1)*size; 336 first=(char*)base; last=first+(nmemb-1)*size;
337 337
339 char *ffirst=first,*llast=last; 339 char *ffirst=first,*llast=last;
340 while (1) { 340 while (1) {
341 /* Select pivot */ 341 /* Select pivot */
342 { char * mid=first+size*((last-first)/size >> 1); 342 { char * mid=first+size*((last-first)/size >> 1);
343 Pivot(SWAP_aligned,size); 343 Pivot(SWAP_aligned,size);
344 memcpy(pivot,mid,size); 344 SDL_memcpy(pivot,mid,size);
345 } 345 }
346 /* Partition. */ 346 /* Partition. */
347 Partition(SWAP_aligned,size); 347 Partition(SWAP_aligned,size);
348 /* Prepare to recurse/iterate. */ 348 /* Prepare to recurse/iterate. */
349 Recurse(trunc) 349 Recurse(trunc)
350 } 350 }
351 } 351 }
352 PreInsertion(SWAP_aligned,TRUNC_aligned,size); 352 PreInsertion(SWAP_aligned,TRUNC_aligned,size);
353 Insertion(SWAP_aligned); 353 Insertion(SWAP_aligned);
354 free(pivot); 354 SDL_free(pivot);
355 } 355 }
356 356
357 static void qsort_words(void *base, size_t nmemb, 357 static void qsort_words(void *base, size_t nmemb,
358 int (*compare)(const void *, const void *)) { 358 int (*compare)(const void *, const void *)) {
359 359
360 stack_entry stack[STACK_SIZE]; 360 stack_entry stack[STACK_SIZE];
361 int stacktop=0; 361 int stacktop=0;
362 char *first,*last; 362 char *first,*last;
363 char *pivot=malloc(WORD_BYTES); 363 char *pivot=SDL_malloc(WORD_BYTES);
364 assert(pivot!=0); 364 assert(pivot!=0);
365 365
366 first=(char*)base; last=first+(nmemb-1)*WORD_BYTES; 366 first=(char*)base; last=first+(nmemb-1)*WORD_BYTES;
367 367
368 if (last-first>TRUNC_words) { 368 if (last-first>TRUNC_words) {
396 *(int*)pivot=*(int*)first; 396 *(int*)pivot=*(int*)first;
397 for (;compare(pl,pivot)>0;pr=pl,--pl) { 397 for (;compare(pl,pivot)>0;pr=pl,--pl) {
398 *pr=*pl; } 398 *pr=*pl; }
399 if (pr!=(int*)first) *pr=*(int*)pivot; 399 if (pr!=(int*)first) *pr=*(int*)pivot;
400 } 400 }
401 free(pivot); 401 SDL_free(pivot);
402 } 402 }
403 403
404 /* ---------------------------------------------------------------------- */ 404 /* ---------------------------------------------------------------------- */
405 405
406 void SDL_qsort(void *base, size_t nmemb, size_t size, 406 void SDL_qsort(void *base, size_t nmemb, size_t size,