home *** CD-ROM | disk | FTP | other *** search
- package COM.objectspace.jgl;
-
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.util.Enumeration;
-
- public class HashSet implements Set {
- static final int DEFAULT_SIZE = 203;
- static final float DEFAULT_RATIO = 0.75F;
- BinaryPredicate comparator;
- boolean allowDups;
- boolean expandActive;
- transient int size;
- transient HashSetNode[] buckets;
- int length;
- int limit;
- float ratio;
-
- public HashSet() {
- this(new EqualTo(), false, 203, 0.75F);
- }
-
- public HashSet(boolean var1) {
- this(new EqualTo(), var1, 203, 0.75F);
- }
-
- public HashSet(BinaryPredicate var1) {
- this(var1, false, 203, 0.75F);
- }
-
- public HashSet(BinaryPredicate var1, boolean var2) {
- this(var1, var2, 203, 0.75F);
- }
-
- public HashSet(BinaryPredicate var1, int var2, float var3) {
- this(var1, false, var2, var3);
- }
-
- public HashSet(BinaryPredicate var1, boolean var2, int var3, float var4) {
- this.allowDups = false;
- this.expandActive = true;
- this.comparator = var1;
- this.allowDups = var2;
- this.ratio = var4;
- this.length = var3;
- this.limit = (int)((float)this.length * this.ratio);
- this.buckets = new HashSetNode[this.length];
- }
-
- public HashSet(HashSet var1) {
- this.allowDups = false;
- this.expandActive = true;
- this.copy(var1);
- }
-
- public boolean allowsDuplicates() {
- return this.allowDups;
- }
-
- public BinaryPredicate getComparator() {
- return this.comparator;
- }
-
- public float getLoadRatio() {
- return this.ratio;
- }
-
- public synchronized Object clone() {
- return new HashSet(this);
- }
-
- public synchronized void copy(HashSet var1) {
- synchronized(var1){}
-
- try {
- this.comparator = var1.comparator;
- this.length = var1.length;
- this.ratio = var1.ratio;
- this.limit = var1.limit;
- this.size = var1.size;
- this.buckets = new HashSetNode[this.length];
- this.allowDups = var1.allowDups;
-
- for(int var4 = 0; var4 < this.length; ++var4) {
- HashSetNode var5 = null;
-
- for(HashSetNode var6 = var1.buckets[var4]; var6 != null; var6 = var6.next) {
- HashSetNode var7 = new HashSetNode(this);
- var7.object = var6.object;
- var7.hash = var6.hash;
- if (this.buckets[var4] == null) {
- this.buckets[var4] = var7;
- } else {
- var5.next = var7;
- }
-
- var5 = var7;
- }
- }
- } catch (Throwable var9) {
- throw var9;
- }
-
- }
-
- public synchronized String toString() {
- return "HashSet" + Printing.toString(this.start(), this.finish());
- }
-
- public synchronized Enumeration elements() {
- return new HashSetIterator(this.first(), this);
- }
-
- public ForwardIterator start() {
- return this.begin();
- }
-
- public ForwardIterator finish() {
- return this.end();
- }
-
- public synchronized HashSetIterator begin() {
- return new HashSetIterator(this.first(), this);
- }
-
- public synchronized HashSetIterator end() {
- return new HashSetIterator((HashSetNode)null, this);
- }
-
- public boolean isEmpty() {
- return this.size == 0;
- }
-
- public int size() {
- return this.size;
- }
-
- public int maxSize() {
- return Integer.MAX_VALUE;
- }
-
- public boolean equals(Object var1) {
- return var1 instanceof HashSet && this.equals((HashSet)var1);
- }
-
- public synchronized boolean equals(HashSet var1) {
- synchronized(var1){}
-
- try {
- if (this.size != var1.size) {
- boolean var11 = false;
- return var11;
- } else if (!this.allowDups) {
- HashSetIterator var12 = this.begin();
-
- while(var12.myNode != null) {
- if (var1.count(var12.myNode.object) == 0) {
- boolean var10 = false;
- return var10;
- }
-
- var12.advance();
- }
-
- return true;
- } else {
- Object var5 = null;
-
- for(HashSetIterator var6 = this.begin(); var6.myNode != null; var6.advance()) {
- Object var7 = var6.myNode.object;
- if (var5 == null || !var7.equals(var5)) {
- if (this.count(var7) != var1.count(var7)) {
- boolean var2 = false;
- return var2;
- }
-
- var5 = var7;
- }
- }
-
- return true;
- }
- } catch (Throwable var9) {
- throw var9;
- }
- }
-
- public synchronized int hashCode() {
- return Hashing.unorderedHash(this.start(), this.finish());
- }
-
- public synchronized void swap(HashSet var1) {
- synchronized(var1){}
-
- try {
- int var4 = this.size;
- this.size = var1.size;
- var1.size = var4;
- HashSetNode[] var5 = this.buckets;
- this.buckets = var1.buckets;
- var1.buckets = var5;
- int var6 = this.length;
- this.length = var1.length;
- var1.length = var6;
- int var7 = this.limit;
- this.limit = var1.limit;
- var1.limit = var7;
- float var8 = this.ratio;
- this.ratio = var1.ratio;
- var1.ratio = var8;
- boolean var9 = this.allowDups;
- this.allowDups = var1.allowDups;
- var1.allowDups = var9;
- } catch (Throwable var11) {
- throw var11;
- }
-
- }
-
- public synchronized void clear() {
- this.buckets = new HashSetNode[this.length];
- this.size = 0;
- }
-
- public int remove(Object var1) {
- Pair var2 = this.removeAux(var1, this.size);
- return ((Number)var2.second).intValue();
- }
-
- public int remove(Object var1, int var2) {
- Pair var3 = this.removeAux(var1, var2);
- return ((Number)var3.second).intValue();
- }
-
- synchronized Pair removeAux(Object var1, int var2) {
- if (var2 > 0) {
- int var3 = var1.hashCode() & Integer.MAX_VALUE;
- int var4 = var3 % this.length;
- HashSetNode var5 = this.buckets[var4];
-
- for(HashSetNode var6 = null; var5 != null; var5 = var5.next) {
- if (var5.hash == var3 && this.comparator.execute(var5.object, var1)) {
- int var7 = 1;
- --var2;
- HashSetNode var8 = var5.next;
- Object var9 = var5.object;
- if (this.allowDups) {
- while(var2 > 0 && var8 != null && var8.hash == var3 && this.comparator.execute(var8.object, var1)) {
- ++var7;
- --var2;
- var8 = var8.next;
- }
- }
-
- if (var6 == null) {
- this.buckets[var4] = var8;
- } else {
- var6.next = var8;
- }
-
- this.size -= var7;
- return new Pair(var9, new Integer(var7));
- }
-
- var6 = var5;
- }
- }
-
- return new Pair((Object)null, new Integer(0));
- }
-
- public synchronized Object remove(Enumeration var1) {
- if (!(var1 instanceof HashSetIterator)) {
- throw new IllegalArgumentException("Enumeration not a HashSetIterator");
- } else if (((HashSetIterator)var1).myHashSet != this) {
- throw new IllegalArgumentException("Enumeration not for this HashSet");
- } else {
- HashSetIterator var2 = (HashSetIterator)var1;
- HashSetNode var3 = var2.myNode;
- int var4 = var3.hash % this.length;
- HashSetNode var5 = this.buckets[var4];
- if (var3 == var5) {
- this.buckets[var4] = var3.next;
- } else {
- while(var5.next != var3) {
- var5 = var5.next;
- }
-
- var5.next = var3.next;
- }
-
- --this.size;
- return var3 == null ? null : var3.object;
- }
- }
-
- public synchronized int remove(Enumeration var1, Enumeration var2) {
- if (var1 instanceof HashSetIterator && var2 instanceof HashSetIterator) {
- if (((HashSetIterator)var1).myHashSet == this && ((HashSetIterator)var2).myHashSet == this) {
- HashSetIterator var3 = (HashSetIterator)var1;
- HashSetIterator var4 = (HashSetIterator)var2;
-
- int var5;
- for(var5 = 0; var3.myNode != var4.myNode; ++var5) {
- HashSetIterator var6 = new HashSetIterator(var3);
- var6.advance();
- this.remove((Enumeration)var3);
- var3 = var6;
- }
-
- return var5;
- } else {
- throw new IllegalArgumentException("Enumeration not for this HashSet");
- }
- } else {
- throw new IllegalArgumentException("Enumeration not a HashSetIterator");
- }
- }
-
- public synchronized HashSetIterator find(Object var1) {
- int var2 = var1.hashCode() & Integer.MAX_VALUE;
-
- for(HashSetNode var3 = this.buckets[var2 % this.length]; var3 != null; var3 = var3.next) {
- if (var2 == var3.hash && this.comparator.execute(var3.object, var1)) {
- return new HashSetIterator(var3, this);
- }
- }
-
- return new HashSetIterator((HashSetNode)null, this);
- }
-
- public synchronized int count(Object var1) {
- int var2 = var1.hashCode() & Integer.MAX_VALUE;
-
- for(HashSetNode var3 = this.buckets[var2 % this.length]; var3 != null; var3 = var3.next) {
- if (var2 == var3.hash && this.comparator.execute(var3.object, var1)) {
- if (!this.allowDups) {
- return 1;
- }
-
- int var4 = 1;
-
- for(HashSetNode var5 = var3.next; var5 != null && var2 == var5.hash && this.comparator.execute(var5.object, var1); var5 = var5.next) {
- ++var4;
- }
-
- return var4;
- }
- }
-
- return 0;
- }
-
- public synchronized Object add(Object var1) {
- if (var1 == null) {
- throw new NullPointerException();
- } else {
- int var2 = var1.hashCode() & Integer.MAX_VALUE;
- int var3 = var2 % this.length;
-
- for(HashSetNode var4 = this.buckets[var3]; var4 != null; var4 = var4.next) {
- if (var2 == var4.hash && this.comparator.execute(var4.object, var1)) {
- if (this.allowDups) {
- HashSetNode var5 = new HashSetNode(this);
- var5.object = var1;
- var5.hash = var2;
- var5.next = var4.next;
- var4.next = var5;
- if (++this.size > this.limit) {
- this.expand();
- }
-
- return null;
- }
-
- return var4.object;
- }
- }
-
- HashSetNode var6 = new HashSetNode(this);
- var6.object = var1;
- var6.hash = var2;
- var6.next = this.buckets[var3];
- this.buckets[var3] = var6;
- if (++this.size > this.limit) {
- this.expand();
- }
-
- return null;
- }
- }
-
- public synchronized Object get(Object var1) {
- int var2 = var1.hashCode() & Integer.MAX_VALUE;
-
- for(HashSetNode var3 = this.buckets[var2 % this.length]; var3 != null; var3 = var3.next) {
- if (var2 == var3.hash && this.comparator.execute(var3.object, var1)) {
- return var3.object;
- }
- }
-
- return null;
- }
-
- public synchronized Object put(Object var1) {
- if (var1 == null) {
- throw new NullPointerException();
- } else {
- int var2 = var1.hashCode() & Integer.MAX_VALUE;
- int var3 = var2 % this.length;
-
- for(HashSetNode var4 = this.buckets[var3]; var4 != null; var4 = var4.next) {
- if (var2 == var4.hash && this.comparator.execute(var4.object, var1)) {
- Object var5 = var4.object;
- var4.object = var1;
- return var5;
- }
- }
-
- HashSetNode var6 = new HashSetNode(this);
- var6.object = var1;
- var6.hash = var2;
- var6.next = this.buckets[var3];
- this.buckets[var3] = var6;
- if (++this.size > this.limit) {
- this.expand();
- }
-
- return null;
- }
- }
-
- public synchronized HashSet union(HashSet var1) {
- synchronized(var1){}
-
- HashSet var2;
- try {
- if (this.allowDups || var1.allowDups) {
- throw new InvalidOperationException("union operation invalid on multisets");
- }
-
- HashSet var5 = new HashSet();
- InsertIterator var6 = new InsertIterator(var5);
- Copying.copy(this.start(), this.finish(), var6);
- Copying.copy(var1.start(), var1.finish(), var6);
- var2 = var5;
- } catch (Throwable var10) {
- throw var10;
- }
-
- return var2;
- }
-
- public synchronized HashSet intersection(HashSet var1) {
- synchronized(var1){}
-
- HashSet var2;
- try {
- if (this.allowDups || var1.allowDups) {
- throw new InvalidOperationException("intersection operation invalid on multisets");
- }
-
- HashSet var5 = new HashSet();
- HashSetIterator var6;
- if (this.size >= var1.size) {
- var6 = this.begin();
- } else {
- var6 = var1.begin();
- var1 = this;
- }
-
- while(var6.myNode != null) {
- Object var7 = var6.nextElement();
- if (var1.count(var7) > 0) {
- var5.add(var7);
- }
- }
-
- var2 = var5;
- } catch (Throwable var9) {
- throw var9;
- }
-
- return var2;
- }
-
- public synchronized HashSet difference(HashSet var1) {
- synchronized(var1){}
-
- HashSet var2;
- try {
- if (this.allowDups || var1.allowDups) {
- throw new InvalidOperationException("difference operation invalid on multisets");
- }
-
- HashSet var5 = new HashSet();
- HashSetIterator var6 = this.begin();
-
- while(var6.myNode != null) {
- Object var7 = var6.nextElement();
- if (var1.count(var7) == 0) {
- var5.add(var7);
- }
- }
-
- var2 = var5;
- } catch (Throwable var9) {
- throw var9;
- }
-
- return var2;
- }
-
- public synchronized HashSet symmetricDifference(HashSet var1) {
- synchronized(var1){}
-
- HashSet var2;
- try {
- if (this.allowDups || var1.allowDups) {
- throw new InvalidOperationException("symmetricDifference operation invalid on multisets");
- }
-
- HashSet var5 = new HashSet();
- HashSetIterator var6 = this.begin();
-
- while(var6.myNode != null) {
- Object var7 = var6.nextElement();
- if (var1.count(var7) == 0) {
- var5.add(var7);
- }
- }
-
- var6 = var1.begin();
-
- while(var6.myNode != null) {
- Object var11 = var6.nextElement();
- if (this.count(var11) == 0) {
- var5.add(var11);
- }
- }
-
- var2 = var5;
- } catch (Throwable var9) {
- throw var9;
- }
-
- return var2;
- }
-
- public synchronized boolean subsetOf(HashSet var1) {
- synchronized(var1){}
-
- boolean var2;
- try {
- if (this.allowDups || var1.allowDups) {
- throw new InvalidOperationException("subsetOf operation invalid on multisets");
- }
-
- HashSetIterator var5 = this.begin();
-
- do {
- if (var5.myNode == null) {
- var2 = true;
- return var2;
- }
- } while(var1.count(var5.nextElement()) != 0);
-
- var2 = false;
- } catch (Throwable var7) {
- throw var7;
- }
-
- return var2;
- }
-
- public synchronized boolean properSubsetOf(HashSet var1) {
- synchronized(var1){}
-
- boolean var2;
- try {
- if (this.allowDups || var1.allowDups) {
- throw new InvalidOperationException("properSubsetOf operation invalid on multisets");
- }
-
- var2 = this.size < var1.size && this.subsetOf(var1);
- } catch (Throwable var6) {
- throw var6;
- }
-
- return var2;
- }
-
- public synchronized HashSetIterator lowerBound(Object var1) {
- return (HashSetIterator)this.equalRange(var1).begin;
- }
-
- public synchronized HashSetIterator upperBound(Object var1) {
- return (HashSetIterator)this.equalRange(var1).end;
- }
-
- public synchronized Range equalRange(Object var1) {
- int var2 = var1.hashCode() & Integer.MAX_VALUE;
-
- for(HashSetNode var3 = this.buckets[var2 % this.length]; var3 != null; var3 = var3.next) {
- if (var2 == var3.hash && this.comparator.execute(var3.object, var1)) {
- HashSetNode var4 = var3;
-
- for(var3 = var3.next; var3 != null && var2 == var3.hash && this.comparator.execute(var3.object, var1); var3 = var3.next == null ? this.next(var3) : var3.next) {
- }
-
- return new Range(new HashSetIterator(var4, this), new HashSetIterator(var3, this));
- }
- }
-
- return new Range(this.end(), this.end());
- }
-
- private HashSetNode first() {
- if (this.size > 0) {
- for(int var1 = 0; var1 < this.length; ++var1) {
- if (this.buckets[var1] != null) {
- return this.buckets[var1];
- }
- }
- }
-
- return null;
- }
-
- private HashSetNode next(HashSetNode var1) {
- for(int var2 = var1.hash % this.length + 1; var2 < this.length; ++var2) {
- if (this.buckets[var2] != null) {
- return this.buckets[var2];
- }
- }
-
- return null;
- }
-
- public boolean expansionAllowed() {
- return this.expandActive;
- }
-
- public synchronized void allowExpansion(boolean var1) {
- this.expandActive = var1;
- }
-
- private void expand() {
- if (this.expansionAllowed()) {
- int var1 = this.length * 2 + 1;
- HashSetNode[] var2 = new HashSetNode[var1];
-
- HashSetNode var5;
- int var6;
- for(int var3 = 0; var3 < this.length; ++var3) {
- for(HashSetNode var4 = this.buckets[var3]; var4 != null; var2[var6] = var5) {
- var5 = var4;
- var4 = var4.next;
- var6 = var5.hash % var1;
- var5.next = var2[var6];
- }
- }
-
- this.buckets = var2;
- this.length = var1;
- this.limit = (int)((float)this.length * this.ratio);
- }
- }
-
- private synchronized void writeObject(ObjectOutputStream var1) throws IOException {
- var1.defaultWriteObject();
- var1.writeInt(this.size);
- Copying.copy(this.begin(), this.end(), new ObjectOutputStreamIterator(var1));
- }
-
- private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- var1.defaultReadObject();
- this.buckets = new HashSetNode[this.length];
- int var2 = var1.readInt();
-
- while(var2-- > 0) {
- this.add(var1.readObject());
- }
-
- }
- }
-