Merge branch 'master' into gnu

Conflicts:

	classpath/java/util/TreeSet.java
This commit is contained in:
Joel Dice
2009-07-25 18:38:57 -06:00
10 changed files with 378 additions and 72 deletions

View File

@ -13,7 +13,7 @@ package java.util;
import avian.PersistentSet;
import avian.Cell;
public class TreeSet<T> extends AbstractSet<T> implements Collection<T> {
public class TreeSet<T> extends AbstractSet<T> implements Collection<T> {
private PersistentSet<Cell<T>> set;
private int size;
@ -52,34 +52,52 @@ public class TreeSet<T> extends AbstractSet<T> implements Collection<T> {
return false;
}
// Used by hashMaps for replacement
public void addAndReplace(T value) {
T addAndReplace(T value) {
PersistentSet.Path<Cell<T>> p = set.find(new Cell(value, null));
if (p.fresh()) {
set = p.add();
++size;
return null;
} else {
T old = p.value().value;
set = p.replaceWith(new Cell(value, null));
return old;
}
}
public boolean remove(Object value) {
T find(T value) {
PersistentSet.Path<Cell<T>> p = set.find(new Cell(value, null));
return p.fresh() ? null : p.value().value;
}
T removeAndReturn(T value) {
Cell<T> cell = removeCell(value);
return cell == null ? null : cell.value;
}
private Cell<T> removeCell(Object value) {
PersistentSet.Path<Cell<T>> p = set.find(new Cell(value, null));
if (p.fresh()) {
return false;
return null;
} else {
--size;
Cell<T> old = p.value();
if (p.value().next != null) {
set = p.replaceWith(p.value().next);
} else {
set = p.remove();
}
return true;
return old;
}
}
public boolean remove(Object value) {
return removeCell(value) != null;
}
public int size() {
return size;
}