Mercurial > projects > ldc
view tango/lib/compiler/llvmdc/qsort2.d @ 203:e881c9b1c738 trunk
[svn r219] Fixed: the tango/lib/gc/basic garbage collector now compiles and links into an executable (change in tango/lib/llvmdc-posix.mak), closes #5 .
Changed: removed the crappy realloc based dynamic memory runtime and started moving over to DMD style runtime support, part of moving to real GC.
Fixed: dynamic arrays now use GC runtime for allocating memory.
Fixed: new expression now use GC for allocating memory.
Changed: revamped the dynamic array support routines related to dynamic memory.
Fixed: assertions no longer create exsessive allocas.
Changed: misc. minor cleanups.
author | lindquist |
---|---|
date | Tue, 13 May 2008 14:42:09 +0200 |
parents | 1700239cab2e |
children | d9d5d59873d8 |
line wrap: on
line source
/* * Placed into Public Domain * written by Walter Bright * www.digitalmars.com * * This is a public domain version of qsort.d. * All it does is call C's qsort(), but runs a little slower since * it needs to synchronize a global variable. */ /* * Modified by Sean Kelly <sean@f4.ca> for use with Tango. */ //debug=qsort; private import tango.stdc.stdlib; struct Array { size_t length; void* ptr; } private TypeInfo tiglobal; extern (C) int cmp(void* p1, void* p2) { return tiglobal.compare(p1, p2); } extern (C) long _adSort(Array a, TypeInfo ti) { synchronized { tiglobal = ti; tango.stdc.stdlib.qsort(a.ptr, a.length, cast(size_t)ti.tsize(), &cmp); } return *cast(long*)(&a); } unittest { debug(qsort) printf("array.sort.unittest()\n"); int a[] = new int[10]; a[0] = 23; a[1] = 1; a[2] = 64; a[3] = 5; a[4] = 6; a[5] = 5; a[6] = 17; a[7] = 3; a[8] = 0; a[9] = -1; a.sort; for (int i = 0; i < a.length - 1; i++) { //printf("i = %d", i); //printf(" %d %d\n", a[i], a[i + 1]); assert(a[i] <= a[i + 1]); } }