From 63aa39bbdac0e990102d3b51138de7d9e5eb7163 Mon Sep 17 00:00:00 2001 From: adam Date: Thu, 8 Apr 2004 03:28:48 +0000 Subject: [PATCH] make runtime independent of foo_alloc darcs-hash:20040408032848-5007d-87037bbfd11863eef9d3baea5f8b2c3df1fb479a.gz --- src/org/ibex/Box.java | 34 ++++++++++++++-------------------- src/org/ibex/util/Simplex.java | 30 +++++++++++++++++------------- src/org/ibex/util/Vec.java | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 33 deletions(-) diff --git a/src/org/ibex/Box.java b/src/org/ibex/Box.java index e3e30ec..fb4e985 100644 --- a/src/org/ibex/Box.java +++ b/src/org/ibex/Box.java @@ -277,10 +277,9 @@ public final class Box extends JSScope implements Scheduler.Task { } private static float[] coeff = null; - private static Simplex lp_h = new Simplex(100, 100, 300); - private static Simplex lp = new Simplex(100, 100, 300); + private static Simplex lp_h = new Simplex(65535, 65535, 65535); + private static Simplex lp = new Simplex(65535, 65535, 65535); - // FIXME: numboxes^2, and damn ugly to boot private static int[] regions = new int[65535]; private static int[] regions_v = new int[65535]; private static int numregions = 0; @@ -291,18 +290,18 @@ public final class Box extends JSScope implements Scheduler.Task { private void computeRegions() { numregions = 0; for(Box c = firstPackedChild(); c != null; c = c.nextPackedSibling()) { - int target = c.col; - for(boolean stop = false;;) { - for(int i=0; i<=numregions; i++) { - if (i == numregions) { regions[numregions++] = target; break; } - if (target == regions[i]) break; - if (target < regions[i]) { int tmp = target; target = regions[i]; regions[i] = tmp; } - } - if (stop) break; - stop = true; - target = min(cols, c.col+c.colspan); - } + regions[numregions++] = c.col; + regions[numregions++] = min(cols, c.col+c.colspan); + } + Vec.sortInts(regions, 0, numregions); + int j = 0; + int newnumregions = numregions; + for(int i=1; i= end) return; + if(end-start <= 6) { + for(int i=start+1;i<=end;i++) { + tmpa = a[i]; + int j; + for(j=i-1;j>=start;j--) { + if(a[j] <= tmpa) break; + a[j+1] = a[j]; + } + a[j+1] = tmpa; + } + return; + } + + int pivot = a[end]; + int lo = start - 1; + int hi = end; + + do { + while(a[++lo] < pivot) { } + while((hi > lo) && a[--hi] > pivot) { } + swapInts(a, lo, hi); + } while(lo < hi); + swapInts(a, lo, end); + sortInts(a, start, lo-1); + sortInts(a, lo+1, end); + } + + private static final void swapInts(int[] vec, int a, int b) { + if(a != b) { + int tmp = vec[a]; + vec[a] = vec[b]; + vec[b] = tmp; + } + } } -- 1.7.10.4