refactor: rename QuadTree to Node
This commit is contained in:
parent
a42bd9684f
commit
27dc7f1f2d
@ -148,7 +148,7 @@ public class ExtrusionRenderer extends LayerRenderer {
|
|||||||
if (!t.hasProxy(1 << j))
|
if (!t.hasProxy(1 << j))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
MapTile c = t.rel.get(j);
|
MapTile c = t.node.child(j);
|
||||||
el = getLayer(c);
|
el = getLayer(c);
|
||||||
|
|
||||||
if (el == null || !el.compiled)
|
if (el == null || !el.compiled)
|
||||||
|
|||||||
@ -22,7 +22,7 @@ import org.oscim.renderer.elements.ElementLayers;
|
|||||||
import org.oscim.renderer.elements.SymbolItem;
|
import org.oscim.renderer.elements.SymbolItem;
|
||||||
import org.oscim.renderer.elements.TextItem;
|
import org.oscim.renderer.elements.TextItem;
|
||||||
import org.oscim.utils.pool.Inlist;
|
import org.oscim.utils.pool.Inlist;
|
||||||
import org.oscim.utils.quadtree.QuadTree;
|
import org.oscim.utils.quadtree.Node;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extends Tile class to hold state and data for concurrent use in
|
* Extends Tile class to hold state and data for concurrent use in
|
||||||
@ -99,7 +99,7 @@ public class MapTile extends Tile {
|
|||||||
/**
|
/**
|
||||||
* Pointer to access relatives in QuadTree
|
* Pointer to access relatives in QuadTree
|
||||||
*/
|
*/
|
||||||
public QuadTree<MapTile> rel;
|
public Node<MapTile> node;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* to avoid drawing a tile twice per frame
|
* to avoid drawing a tile twice per frame
|
||||||
@ -162,20 +162,20 @@ public class MapTile extends Tile {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// lock all tiles that could serve as proxy
|
// lock all tiles that could serve as proxy
|
||||||
MapTile p = rel.parent.item;
|
MapTile p = node.parent.item;
|
||||||
if (p != null && (p.state != 0)) {
|
if (p != null && (p.state != 0)) {
|
||||||
proxies |= PROXY_PARENT;
|
proxies |= PROXY_PARENT;
|
||||||
p.refs++;
|
p.refs++;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = rel.parent.parent.item;
|
p = node.parent.parent.item;
|
||||||
if (p != null && (p.state != 0)) {
|
if (p != null && (p.state != 0)) {
|
||||||
proxies |= PROXY_GRAMPA;
|
proxies |= PROXY_GRAMPA;
|
||||||
p.refs++;
|
p.refs++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int j = 0; j < 4; j++) {
|
for (int j = 0; j < 4; j++) {
|
||||||
if ((p = rel.get(j)) == null || p.state == 0)
|
if ((p = node.child(j)) == null || p.state == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
proxies |= (1 << j);
|
proxies |= (1 << j);
|
||||||
@ -191,14 +191,14 @@ public class MapTile extends Tile {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if ((proxies & PROXY_PARENT) != 0)
|
if ((proxies & PROXY_PARENT) != 0)
|
||||||
rel.parent.item.refs--;
|
node.parent.item.refs--;
|
||||||
|
|
||||||
if ((proxies & PROXY_GRAMPA) != 0)
|
if ((proxies & PROXY_GRAMPA) != 0)
|
||||||
rel.parent.parent.item.refs--;
|
node.parent.parent.item.refs--;
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
if ((proxies & (1 << i)) != 0)
|
if ((proxies & (1 << i)) != 0)
|
||||||
rel.get(i).refs--;
|
node.child(i).refs--;
|
||||||
}
|
}
|
||||||
proxies = 0;
|
proxies = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,7 +31,7 @@ import org.oscim.map.Viewport;
|
|||||||
import org.oscim.renderer.BufferObject;
|
import org.oscim.renderer.BufferObject;
|
||||||
import org.oscim.utils.FastMath;
|
import org.oscim.utils.FastMath;
|
||||||
import org.oscim.utils.ScanBox;
|
import org.oscim.utils.ScanBox;
|
||||||
import org.oscim.utils.quadtree.QuadTree;
|
import org.oscim.utils.quadtree.Node;
|
||||||
import org.oscim.utils.quadtree.QuadTreeIndex;
|
import org.oscim.utils.quadtree.QuadTreeIndex;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -89,24 +89,24 @@ public class TileManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MapTile create(int x, int y, int z) {
|
public MapTile create(int x, int y, int z) {
|
||||||
QuadTree<MapTile> t = super.add(x, y, z);
|
Node<MapTile> t = super.add(x, y, z);
|
||||||
t.item = new MapTile(x, y, (byte) z);
|
t.item = new MapTile(x, y, (byte) z);
|
||||||
t.item.rel = t;
|
t.item.node = t;
|
||||||
|
|
||||||
return t.item;
|
return t.item;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove(MapTile t) {
|
public void remove(MapTile t) {
|
||||||
if (t.rel == null) {
|
if (t.node == null) {
|
||||||
log.debug("BUG already removed " + t);
|
log.debug("BUG already removed " + t);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
super.remove(t.rel);
|
super.remove(t.node);
|
||||||
|
|
||||||
t.rel.item = null;
|
t.node.item = null;
|
||||||
t.rel = null;
|
t.node = null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -342,7 +342,7 @@ public class TileManager {
|
|||||||
boolean add = false;
|
boolean add = false;
|
||||||
|
|
||||||
// prefetch parent
|
// prefetch parent
|
||||||
MapTile p = tile.rel.parent.item;
|
MapTile p = tile.node.parent.item;
|
||||||
|
|
||||||
if (p == null) {
|
if (p == null) {
|
||||||
p = mIndex.create(x >> 1, y >> 1, zoomLevel - 1);
|
p = mIndex.create(x >> 1, y >> 1, zoomLevel - 1);
|
||||||
|
|||||||
@ -37,7 +37,7 @@ import org.oscim.renderer.elements.PolygonLayer;
|
|||||||
import org.oscim.renderer.elements.RenderElement;
|
import org.oscim.renderer.elements.RenderElement;
|
||||||
import org.oscim.utils.FastMath;
|
import org.oscim.utils.FastMath;
|
||||||
import org.oscim.utils.ScanBox;
|
import org.oscim.utils.ScanBox;
|
||||||
import org.oscim.utils.quadtree.QuadTree;
|
import org.oscim.utils.quadtree.Node;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -151,7 +151,7 @@ public class TileRenderer extends LayerRenderer {
|
|||||||
|
|
||||||
// check near relatives than can serve as proxy
|
// check near relatives than can serve as proxy
|
||||||
if ((tile.proxies & MapTile.PROXY_PARENT) != 0) {
|
if ((tile.proxies & MapTile.PROXY_PARENT) != 0) {
|
||||||
MapTile rel = tile.rel.parent.item;
|
MapTile rel = tile.node.parent.item;
|
||||||
if (rel.state == STATE_NEW_DATA)
|
if (rel.state == STATE_NEW_DATA)
|
||||||
uploadCnt += uploadTileData(rel);
|
uploadCnt += uploadTileData(rel);
|
||||||
|
|
||||||
@ -163,7 +163,7 @@ public class TileRenderer extends LayerRenderer {
|
|||||||
if ((tile.proxies & 1 << c) == 0)
|
if ((tile.proxies & 1 << c) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
MapTile rel = tile.rel.get(i);
|
MapTile rel = tile.node.child(i);
|
||||||
if (rel != null && rel.state == STATE_NEW_DATA)
|
if (rel != null && rel.state == STATE_NEW_DATA)
|
||||||
uploadCnt += uploadTileData(rel);
|
uploadCnt += uploadTileData(rel);
|
||||||
}
|
}
|
||||||
@ -342,18 +342,18 @@ public class TileRenderer extends LayerRenderer {
|
|||||||
long maxFade = MapRenderer.frametime - 50;
|
long maxFade = MapRenderer.frametime - 50;
|
||||||
|
|
||||||
for (int c = 0; c < 4; c++) {
|
for (int c = 0; c < 4; c++) {
|
||||||
MapTile ci = t.rel.get(c);
|
MapTile ci = t.node.child(c);
|
||||||
if (ci == null)
|
if (ci == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ci.state == MapTile.STATE_READY || ci.fadeTime > 0)
|
if (ci.state == MapTile.STATE_READY || ci.fadeTime > 0)
|
||||||
maxFade = Math.min(maxFade, ci.fadeTime);
|
maxFade = Math.min(maxFade, ci.fadeTime);
|
||||||
}
|
}
|
||||||
MapTile p = t.rel.getParent();
|
MapTile p = t.node.parent();
|
||||||
if (p != null && (p.state == MapTile.STATE_READY || p.fadeTime > 0)) {
|
if (p != null && (p.state == MapTile.STATE_READY || p.fadeTime > 0)) {
|
||||||
maxFade = Math.min(maxFade, p.fadeTime);
|
maxFade = Math.min(maxFade, p.fadeTime);
|
||||||
|
|
||||||
p = p.rel.getParent();
|
p = p.node.parent();
|
||||||
if (p != null && (p.state == MapTile.STATE_READY || p.fadeTime > 0))
|
if (p != null && (p.state == MapTile.STATE_READY || p.fadeTime > 0))
|
||||||
maxFade = Math.min(maxFade, p.fadeTime);
|
maxFade = Math.min(maxFade, p.fadeTime);
|
||||||
}
|
}
|
||||||
@ -560,7 +560,7 @@ public class TileRenderer extends LayerRenderer {
|
|||||||
if ((tile.proxies & 1 << i) == 0)
|
if ((tile.proxies & 1 << i) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
MapTile c = tile.rel.get(i);
|
MapTile c = tile.node.child(i);
|
||||||
|
|
||||||
if (c.state == STATE_READY) {
|
if (c.state == STATE_READY) {
|
||||||
drawTile(c, pos);
|
drawTile(c, pos);
|
||||||
@ -573,7 +573,7 @@ public class TileRenderer extends LayerRenderer {
|
|||||||
private void drawProxyTile(MapTile tile, MapPosition pos, boolean parent,
|
private void drawProxyTile(MapTile tile, MapPosition pos, boolean parent,
|
||||||
boolean preferParent) {
|
boolean preferParent) {
|
||||||
|
|
||||||
QuadTree<MapTile> r = tile.rel;
|
Node<MapTile> r = tile.node;
|
||||||
MapTile proxy;
|
MapTile proxy;
|
||||||
|
|
||||||
if (!preferParent) {
|
if (!preferParent) {
|
||||||
|
|||||||
@ -16,12 +16,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.oscim.utils.quadtree;
|
package org.oscim.utils.quadtree;
|
||||||
|
|
||||||
public class QuadTree<T> {
|
public class Node<T> {
|
||||||
public QuadTree<T> parent;
|
public Node<T> parent;
|
||||||
public QuadTree<T> child00;
|
public Node<T> child00;
|
||||||
public QuadTree<T> child10;
|
public Node<T> child10;
|
||||||
public QuadTree<T> child01;
|
public Node<T> child01;
|
||||||
public QuadTree<T> child11;
|
public Node<T> child11;
|
||||||
|
|
||||||
public T item;
|
public T item;
|
||||||
|
|
||||||
@ -31,11 +31,11 @@ public class QuadTree<T> {
|
|||||||
// number of children and grandchildren
|
// number of children and grandchildren
|
||||||
int refs = 0;
|
int refs = 0;
|
||||||
|
|
||||||
public T getParent() {
|
public T parent() {
|
||||||
return parent.item;
|
return parent.item;
|
||||||
}
|
}
|
||||||
|
|
||||||
public T get(int i) {
|
public T child(int i) {
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case 0:
|
case 0:
|
||||||
return (child00 != null) ? child00.item : null;
|
return (child00 != null) ? child00.item : null;
|
||||||
@ -18,12 +18,12 @@ package org.oscim.utils.quadtree;
|
|||||||
|
|
||||||
public abstract class QuadTreeIndex<T> {
|
public abstract class QuadTreeIndex<T> {
|
||||||
|
|
||||||
QuadTree<T> pool;
|
Node<T> pool;
|
||||||
|
|
||||||
QuadTree<T> root;
|
Node<T> root;
|
||||||
|
|
||||||
public QuadTreeIndex() {
|
public QuadTreeIndex() {
|
||||||
root = new QuadTree<T>();
|
root = new Node<T>();
|
||||||
root.parent = root;
|
root.parent = root;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,11 +37,11 @@ public abstract class QuadTreeIndex<T> {
|
|||||||
|
|
||||||
public abstract void remove(T item);
|
public abstract void remove(T item);
|
||||||
|
|
||||||
public QuadTree<T> add(int x, int y, int z) {
|
public Node<T> add(int x, int y, int z) {
|
||||||
|
|
||||||
checkIndex(x, y, 1 << z);
|
checkIndex(x, y, 1 << z);
|
||||||
|
|
||||||
QuadTree<T> leaf = root;
|
Node<T> leaf = root;
|
||||||
|
|
||||||
for (int level = z - 1; level >= 0; level--) {
|
for (int level = z - 1; level >= 0; level--) {
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ public abstract class QuadTreeIndex<T> {
|
|||||||
|
|
||||||
leaf.refs++;
|
leaf.refs++;
|
||||||
|
|
||||||
QuadTree<T> cur = null;
|
Node<T> cur = null;
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case 0:
|
case 0:
|
||||||
@ -75,7 +75,7 @@ public abstract class QuadTreeIndex<T> {
|
|||||||
cur = pool;
|
cur = pool;
|
||||||
pool = pool.parent;
|
pool = pool.parent;
|
||||||
} else {
|
} else {
|
||||||
cur = new QuadTree<T>();
|
cur = new Node<T>();
|
||||||
}
|
}
|
||||||
|
|
||||||
cur.refs = 0;
|
cur.refs = 0;
|
||||||
@ -109,7 +109,7 @@ public abstract class QuadTreeIndex<T> {
|
|||||||
|
|
||||||
checkIndex(x, y, 1 << z);
|
checkIndex(x, y, 1 << z);
|
||||||
|
|
||||||
QuadTree<T> leaf = root;
|
Node<T> leaf = root;
|
||||||
|
|
||||||
for (int level = z - 1; level >= 0; level--) {
|
for (int level = z - 1; level >= 0; level--) {
|
||||||
|
|
||||||
@ -140,10 +140,10 @@ public abstract class QuadTreeIndex<T> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean remove(QuadTree<T> item) {
|
public boolean remove(Node<T> item) {
|
||||||
|
|
||||||
QuadTree<T> cur = item;
|
Node<T> cur = item;
|
||||||
QuadTree<T> next;
|
Node<T> next;
|
||||||
|
|
||||||
while (cur != root) {
|
while (cur != root) {
|
||||||
if (cur == null)
|
if (cur == null)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user