X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleSet.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleSet.java index 3e1544f..d5d20f5 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleSet.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleSet.java @@ -11,101 +11,112 @@ package net.sourceforge.phpdt.internal.core.util; /** - * A simple lookup table is a non-synchronized Hashtable, whose keys - * and values are Objects. It also uses linear probing to resolve collisions - * rather than a linked list of hash table entries. + * A simple lookup table is a non-synchronized Hashtable, whose keys and values + * are Objects. It also uses linear probing to resolve collisions rather than a + * linked list of hash table entries. */ public final class SimpleSet implements Cloneable { -// to avoid using Enumerations, walk the individual values skipping nulls -public Object[] values; -public int elementSize; // number of elements in the table -public int threshold; + // to avoid using Enumerations, walk the individual values skipping nulls + public Object[] values; -public SimpleSet() { - this(13); -} + public int elementSize; // number of elements in the table -public SimpleSet(int size) { - if (size < 3) size = 3; - this.elementSize = 0; - this.threshold = size + 1; // size is the expected number of elements - this.values = new Object[2 * size + 1]; -} + public int threshold; -public Object add(Object object) { - int length = values.length; - int index = (object.hashCode() & 0x7FFFFFFF) % length; - Object current; - while ((current = values[index]) != null) { - if (current.equals(object)) return values[index] = object; - if (++index == length) index = 0; + public SimpleSet() { + this(13); } - values[index] = object; - // assumes the threshold is never equal to the size of the table - if (++elementSize > threshold) rehash(); - return object; -} + public SimpleSet(int size) { + if (size < 3) + size = 3; + this.elementSize = 0; + this.threshold = size + 1; // size is the expected number of elements + this.values = new Object[2 * size + 1]; + } -public Object clone() throws CloneNotSupportedException { - SimpleSet result = (SimpleSet) super.clone(); - result.elementSize = this.elementSize; - result.threshold = this.threshold; + public Object add(Object object) { + int length = values.length; + int index = (object.hashCode() & 0x7FFFFFFF) % length; + Object current; + while ((current = values[index]) != null) { + if (current.equals(object)) + return values[index] = object; + if (++index == length) + index = 0; + } + values[index] = object; - int length = this.values.length; - result.values = new Object[length]; - System.arraycopy(this.values, 0, result.values, 0, length); - return result; -} + // assumes the threshold is never equal to the size of the table + if (++elementSize > threshold) + rehash(); + return object; + } -public boolean includes(Object object) { - int length = values.length; - int index = (object.hashCode() & 0x7FFFFFFF) % length; - Object current; - while ((current = values[index]) != null) { - if (current.equals(object)) return true; - if (++index == length) index = 0; + public Object clone() throws CloneNotSupportedException { + SimpleSet result = (SimpleSet) super.clone(); + result.elementSize = this.elementSize; + result.threshold = this.threshold; + + int length = this.values.length; + result.values = new Object[length]; + System.arraycopy(this.values, 0, result.values, 0, length); + return result; } - return false; -} -public Object remove(Object object) { - int length = values.length; - int index = (object.hashCode() & 0x7FFFFFFF) % length; - Object current; - while ((current = values[index]) != null) { - if (current.equals(object)) { - elementSize--; - Object oldValue = values[index]; - values[index] = null; - if (values[index + 1 == length ? 0 : index + 1] != null) - rehash(); // only needed if a possible collision existed - return oldValue; + public boolean includes(Object object) { + int length = values.length; + int index = (object.hashCode() & 0x7FFFFFFF) % length; + Object current; + while ((current = values[index]) != null) { + if (current.equals(object)) + return true; + if (++index == length) + index = 0; } - if (++index == length) index = 0; + return false; } - return null; -} -private void rehash() { - SimpleSet newSet = new SimpleSet(elementSize * 2); // double the number of expected elements - Object current; - for (int i = values.length; --i >= 0;) - if ((current = values[i]) != null) - newSet.add(current); + public Object remove(Object object) { + int length = values.length; + int index = (object.hashCode() & 0x7FFFFFFF) % length; + Object current; + while ((current = values[index]) != null) { + if (current.equals(object)) { + elementSize--; + Object oldValue = values[index]; + values[index] = null; + if (values[index + 1 == length ? 0 : index + 1] != null) + rehash(); // only needed if a possible collision existed + return oldValue; + } + if (++index == length) + index = 0; + } + return null; + } - this.values = newSet.values; - this.elementSize = newSet.elementSize; - this.threshold = newSet.threshold; -} + private void rehash() { + SimpleSet newSet = new SimpleSet(elementSize * 2); // double the number + // of expected + // elements + Object current; + for (int i = values.length; --i >= 0;) + if ((current = values[i]) != null) + newSet.add(current); -public String toString() { - String s = ""; //$NON-NLS-1$ - Object object; - for (int i = 0, l = values.length; i < l; i++) - if ((object = values[i]) != null) - s += object.toString() + "\n"; //$NON-NLS-1$ - return s; -} + this.values = newSet.values; + this.elementSize = newSet.elementSize; + this.threshold = newSet.threshold; + } + + public String toString() { + String s = ""; //$NON-NLS-1$ + Object object; + for (int i = 0, l = values.length; i < l; i++) + if ((object = values[i]) != null) + s += object.toString() + "\n"; //$NON-NLS-1$ + return s; + } }