X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2Futil%2FVec.java;h=b20e352756c7d1f9c9977670c94acaa3b7d317fc;hb=de378041d5ca2aca1a2b5a31ef15ae90a86c977f;hp=723314e9e299ecaff794859a509a03568be599af;hpb=42da60bd167403eccc3466575772819007388cfd;p=org.ibex.core.git diff --git a/src/org/xwt/util/Vec.java b/src/org/xwt/util/Vec.java index 723314e..b20e352 100644 --- a/src/org/xwt/util/Vec.java +++ b/src/org/xwt/util/Vec.java @@ -1,4 +1,10 @@ -// Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL] +// Copyright (C) 2003 Adam Megacz all rights reserved. +// +// You may modify, copy, and redistribute this code under the terms of +// the GNU Library Public License version 2.1, with the exception of +// the portion of clause 6a after the semicolon (aka the "obnoxious +// relink clause") + package org.xwt.util; import java.util.*; @@ -8,6 +14,9 @@ import java.io.*; * An unsynchronized Vector implementation; same semantics as * java.util.Vector. Useful for JDK1.1 platforms that don't have * java.util.ArrayList. + * + * May contain nulls. + * * @see java.util.Vector */ public final class Vec implements Serializable { @@ -38,7 +47,8 @@ public final class Vec implements Serializable { public int indexOf(Object o) { for(int i=0; i= end) return; if(end-start <= 6) { for(int i=start+1;i<=end;i++) { - tmp = store[i]; + tmpa = a.store[i]; + if (b != null) tmpb = b.store[i]; int j; for(j=i-1;j>=start;j--) { - if(c.compare(store[j],tmp) <= 0) break; - store[j+1] = store[j]; + if(c.compare(a.store[j],tmpa) <= 0) break; + a.store[j+1] = a.store[j]; + if (b != null) b.store[j+1] = b.store[j]; } - store[j+1] = tmp; + a.store[j+1] = tmpa; + if (b != null) b.store[j+1] = tmpb; } return; } - Object pivot = store[end]; + + Object pivot = a.store[end]; int lo = start - 1; int hi = end; + do { - while(c.compare(store[++lo],pivot) < 0) { } - while((hi > lo) && c.compare(store[--hi],pivot) > 0) { } - swap(lo,hi); + while(c.compare(a.store[++lo],pivot) < 0) { } + while((hi > lo) && c.compare(a.store[--hi],pivot) > 0) { } + swap(a, lo,hi); + if (b != null) swap(b, lo,hi); } while(lo < hi); - swap(lo,end); - sort(c,start,lo-1); - sort(c,lo+1,end); + + swap(a, lo,end); + if (b != null) swap(b, lo,end); + + sort(a, b, c, start, lo-1); + sort(a, b, c, lo+1, end); + } + + private static final void swap(Vec vec, int a, int b) { + if(a != b) { + Object tmp = vec.store[a]; + vec.store[a] = vec.store[b]; + vec.store[b] = tmp; + } } }