package jade.util.leap;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class HashSet implements Set, Cloneable, Serializable {
private static final long serialVersionUID = 5439595441274382166L;
private transient java.util.HashSet internalHashSet;
public HashSet() {
internalHashSet = new java.util.HashSet();
}
public HashSet(Collection c) {
internalHashSet = new java.util.HashSet();
Iterator it = c.iterator();
while (it.hasNext()) {
internalHashSet.add(it.next());
}
}
public HashSet(int initialCapacity) {
internalHashSet = new java.util.HashSet(initialCapacity);
}
public boolean add(Object o) {
return internalHashSet.add(o);
}
public boolean isEmpty() {
return internalHashSet.isEmpty();
}
public Iterator iterator() {
return new Iterator() {
java.util.Iterator it = internalHashSet.iterator();
/**
* @see jade.util.leap.Iterator interface
*/
public boolean hasNext() {
return it.hasNext();
}
/**
* @see jade.util.leap.Iterator interface
*/
public Object next() {
return it.next();
}
/**
* @see jade.util.leap.Iterator interface
*/
public void remove() {
it.remove();
}
};
}
public boolean remove(Object o) {
return internalHashSet.remove(o);
}
public int size() {
return internalHashSet.size();
}
public Object[] toArray() {
return internalHashSet.toArray();
}
public void clear() {
internalHashSet.clear();
}
public boolean contains(Object o) {
return internalHashSet.contains(o);
}
public Object clone() {
try {
HashSet newSet;
newSet = (HashSet)super.clone();
newSet.internalHashSet = (java.util.HashSet)internalHashSet.clone();
return newSet;
} catch (CloneNotSupportedException e) {
throw new InternalError();
}
}
public int hashCode() {
int h = 0;
Iterator i = iterator();
while (i.hasNext()) {
Object obj = i.next();
if (obj != null)
h += obj.hashCode();
}
return h;
}
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Set))
return false;
Collection c = (Collection) o;
if (c.size() != size())
return false;
try {
return containsAll(c);
} catch (ClassCastException unused) {
return false;
} catch (NullPointerException unused) {
return false;
}
}
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeInt(internalHashSet.size());
java.util.Iterator it = internalHashSet.iterator();
while (it.hasNext()) {
out.writeObject(it.next());
}
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
int size = in.readInt();
internalHashSet = new java.util.HashSet(size);
for (int i = 0; i < size; i++) {
Object o = in.readObject();
internalHashSet.add(o);
}
}
public boolean addAll(Collection c) {
boolean modified = false;
Iterator iter = c.iterator();
while (iter.hasNext()) {
if (internalHashSet.add(iter.next())) {
modified = true;
}
}
return modified;
}
public boolean containsAll(Collection c) {
java.util.Iterator iter = c.iterator();
while (iter.hasNext()) {
if(!internalHashSet.contains(iter.next())) {
return false;
}
}
return true;
}
public boolean removeAll(Collection c) {
boolean modified = false;
Iterator iter = c.iterator();
while (iter.hasNext()) {
Object o = iter.next();
if (internalHashSet.contains(o)) {
internalHashSet.remove(o);
modified = true;
}
}
return modified;
}
public Object[] toArray(Object[] a) {
return internalHashSet.toArray();
}
}