/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.core.internal.util;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.AbstractSet;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
/**
* @author TMate Software Ltd.
* @version 1.3
*/
public class SVNHashSet extends AbstractSet implements Set, Serializable {
private static final long serialVersionUID = 4845L;
private static final Object OBJECT = new Object();
private transient SVNHashMap myMap;
public SVNHashSet() {
myMap = new SVNHashMap();
}
public SVNHashSet(Collection values) {
myMap = new SVNHashMap();
addAll(values);
}
public boolean add(Object o) {
return myMap.put(o, OBJECT) == null;
}
public void clear() {
myMap.clear();
}
public boolean contains(Object o) {
return myMap.containsKey(o);
}
public Iterator iterator() {
return myMap.keySet().iterator();
}
public boolean remove(Object o) {
return myMap.remove(o) != null;
}
public int size() {
return myMap.size();
}
private void writeObject(ObjectOutputStream s) throws IOException {
s.writeInt(myMap.size());
if (myMap.size() == 0) {
return;
}
for (Iterator i = iterator(); i.hasNext();) {
s.writeObject(i.next());
}
}
private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
myMap = new SVNHashMap();
int size = s.readInt();
for (int i = 0; i < size; i++) {
Object o = s.readObject();
myMap.put(o, OBJECT);
}
}
}