parent
707769f124
commit
7779e30635
@ -23,8 +23,6 @@ public abstract class TileIndex<T extends TreeNode<T, E>, E> {
|
|||||||
|
|
||||||
protected final T root;
|
protected final T root;
|
||||||
|
|
||||||
//protected T minNode;
|
|
||||||
|
|
||||||
protected T pool;
|
protected T pool;
|
||||||
|
|
||||||
public TileIndex() {
|
public TileIndex() {
|
||||||
@ -48,6 +46,9 @@ public abstract class TileIndex<T extends TreeNode<T, E>, E> {
|
|||||||
|
|
||||||
checkIndex(x, y, 1 << z);
|
checkIndex(x, y, 1 << z);
|
||||||
|
|
||||||
|
if (z == 0)
|
||||||
|
return root;
|
||||||
|
|
||||||
T leaf = root;
|
T leaf = root;
|
||||||
|
|
||||||
for (int level = z - 1; level >= 0; level--) {
|
for (int level = z - 1; level >= 0; level--) {
|
||||||
@ -116,8 +117,10 @@ public abstract class TileIndex<T extends TreeNode<T, E>, E> {
|
|||||||
|
|
||||||
checkIndex(x, y, 1 << z);
|
checkIndex(x, y, 1 << z);
|
||||||
|
|
||||||
T leaf = root;
|
if (z == 0)
|
||||||
|
return root.item;
|
||||||
|
|
||||||
|
T leaf = root;
|
||||||
for (int level = z - 1; level >= 0; level--) {
|
for (int level = z - 1; level >= 0; level--) {
|
||||||
|
|
||||||
int id = ((x >> level) & 1) | ((y >> level) & 1) << 1;
|
int id = ((x >> level) & 1) | ((y >> level) & 1) << 1;
|
||||||
@ -148,22 +151,19 @@ public abstract class TileIndex<T extends TreeNode<T, E>, E> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean remove(T item) {
|
public boolean remove(T item) {
|
||||||
|
|
||||||
T cur = item;
|
T cur = item;
|
||||||
T next;
|
|
||||||
|
|
||||||
while (cur != root) {
|
while (cur != root) {
|
||||||
if (cur == null)
|
if (cur == null)
|
||||||
throw new IllegalStateException("Item not in index");
|
throw new IllegalStateException("Item not in index");
|
||||||
|
|
||||||
/* keep pointer to parent */
|
/* keep pointer to parent */
|
||||||
next = cur.parent;
|
T next = cur.parent;
|
||||||
cur.refs--;
|
cur.refs--;
|
||||||
|
|
||||||
/* if current node has no children */
|
/* if current node has no children */
|
||||||
if (cur.refs == 0) {
|
if (cur.refs == 0) {
|
||||||
/* unhook from parent */
|
/* unhook from parent */
|
||||||
|
|
||||||
switch (cur.id) {
|
switch (cur.id) {
|
||||||
case 0:
|
case 0:
|
||||||
next.child00 = null;
|
next.child00 = null;
|
||||||
@ -190,4 +190,9 @@ public abstract class TileIndex<T extends TreeNode<T, E>, E> {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int size() {
|
||||||
|
return root.refs;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user