/* dIntProg Browser. A webbrowser written in Java.
* Copyright (C) 2001 Martin Geisler <[email protected]>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the
*
* Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/** A set of non-<code>null</code> objects. The set is based on an
* array, and will grow as needed to accomodate additional items. */
public class Set {
private Object[] set;
private int count = 0;
/** Constructs a set with an initial size of 32 elements. */
public Set() {
this(32);
}
/** Constructs a set with room for <code>size</code> elements. The
* set will grow as needed.
* @param size the initial size. */
public Set(int size) {
if (size < 2) {
size = 2;
}
set = new Object[size];
}
/** Is the set empty?
* @return <code>true</code> if the set is empty. */
public boolean empty() {
return (count == 0);
}
/** Compares <code>obj</code> to the item is the set to determine
* if <code>obj</code> is already a member of the set. The
* objects are compared using <code>equals</code>.
* @param obj the object to test.
* @return <code>true</code> if the object is already a member.
* */
public boolean member(Object obj) {
for (int i = 0; i < count; i = i + 1) {
if (set[i].equals(obj)) {
return true;
}
}
return false;
}
/** Add an object to the set. The object is only added if it's
* non-<code>null</code>. */
public void add(Object obj) {
if (obj != null && !member(obj)) {
if (count == set.length) {
grow();
}
set[count] = obj;
count = count + 1;
}
}
/** Clears the set. */
public void clear() {
count = 0;
}
/** Enlarges the set. The underlying array is doubled in length. */
private void grow() {
Object[] tmp = new Object[set.length * 2];
System.arraycopy(set, 0, tmp, 0, set.length);
set = tmp;
}
}