public class QuadTree<ElementType extends QuadTreeElement<ElementType>>
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
class |
QuadTree.NewsAndFrees
Instances of this class are used to accumulate news and frees
of objects, from the point of view of perceivers, so that we
can perform the new and free operations, which generate
messages, without holding the top-level quad tree lock.
|
Modifier and Type | Field and Description |
---|---|
protected java.util.Set<FixedPerceiver<ElementType>> |
fixedPerceivers |
protected static Logger |
log |
QuadTree.NewsAndFrees |
spawningNewsAndFrees |
Constructor and Description |
---|
QuadTree(Geometry g) |
QuadTree(Geometry g,
boolean supportsExtentBasedPerceiver) |
QuadTree(Geometry g,
int hysteresis) |
Modifier and Type | Method and Description |
---|---|
QuadTreeNode<ElementType> |
addElement(ElementType elem) |
protected QuadTreeNode<ElementType> |
addElementInternal(ElementType elem,
QuadTree.NewsAndFrees newsAndFrees) |
java.lang.Integer |
addElementReturnCountForPerceiver(ElementType elem,
OID mobilePerceiverOid)
If the perceiverOid is non-null, the count returned is the
count of the number of news plus number of frees for the
perceiver as a result of adding elem to the quadtree; else
null
|
void |
addFixedPerceiver(FixedPerceiver<ElementType> perceiver) |
protected QuadTreeNode<ElementType> |
addHelper(QuadTreeNode<ElementType> node,
ElementType elem,
Point loc,
QuadTree.NewsAndFrees newsAndFrees) |
void |
addRegion(Region region) |
protected void |
createQuadTree(Geometry g,
int hysteresis) |
java.util.Collection<ElementType> |
getElementPerceivables(ElementType elem) |
java.util.Set<ElementType> |
getElements(ElementType elem,
int radius) |
java.util.Set<ElementType> |
getElements(Point loc,
int radius) |
java.util.Set<ElementType> |
getElementsBetween(Point loc1,
Point loc2) |
int |
getHysteresis() |
Geometry |
getLocalGeometry() |
java.util.concurrent.locks.Lock |
getLock() |
int |
getMaxDepth() |
int |
getMaxObjects() |
java.util.List<Region> |
getRegionsContainingPoint(Point loc)
Entrypoint to get the regions containing the point - - needed
now that we've done away with the RegionManager
|
boolean |
getSupportsExtentBasedPerceiver() |
void |
printTree() |
boolean |
removeElement(ElementType elem) |
protected boolean |
removeElementInternal(ElementType elem,
QuadTree.NewsAndFrees newsAndFrees) |
java.lang.Integer |
removeElementReturnCountForPerceiver(ElementType elem,
OID mobilePerceiverOid)
If the perceiverOid is non-null, the count returned is the
count of the number of news plus number of frees for the
perceiver as a result of adding elem to the quadtree; else
null
|
void |
removeFixedPerceiver(FixedPerceiver<ElementType> perceiver) |
void |
setHysteresis(int hysteresis) |
void |
setLocalGeometry(Geometry g) |
protected void |
setLocalGeometryHelper(QuadTreeNode<ElementType> node,
Geometry g,
QuadTree.NewsAndFrees newsAndFrees) |
void |
setMaxDepth(int max) |
void |
setMaxObjects(int max) |
void |
updateElement(ElementType elem,
Point loc)
Moves elem to the right place in the quadtree if its position has changed.
|
protected void |
updateElementInternal(ElementType elem,
Point loc,
QuadTree.NewsAndFrees newsAndFrees) |
protected void |
updateElementPerceiversInternal(ElementType elem,
QuadTreeNode<ElementType> oldNode,
QuadTreeNode<ElementType> newNode,
QuadTree.NewsAndFrees newsAndFrees)
Notify all perceivers that can now see, or can no longer see the specified object (elem)
|
protected void |
updatePerceiver(Perceiver<ElementType> perceiver) |
protected void |
updatePerceiverHelper(java.util.Set<QuadTreeNode<ElementType>> nodeSet,
QuadTreeNode<ElementType> node,
Perceiver<ElementType> perceiver)
Adds all nodes to nodeSet in or under
'node' that the passed in perceiver overlaps with.
|
protected void |
updatePerceiverInternal(Perceiver<ElementType> perceiver,
QuadTree.NewsAndFrees newsAndFrees)
Notify the object's perceiver about what they can see/not see.
|
public QuadTree.NewsAndFrees spawningNewsAndFrees
protected java.util.Set<FixedPerceiver<ElementType extends QuadTreeElement<ElementType>>> fixedPerceivers
protected static final Logger log
public QuadTree(Geometry g)
public QuadTree(Geometry g, int hysteresis)
public QuadTree(Geometry g, boolean supportsExtentBasedPerceiver)
protected void createQuadTree(Geometry g, int hysteresis)
public void printTree()
public java.util.Set<ElementType> getElements(Point loc, int radius)
public java.util.Set<ElementType> getElementsBetween(Point loc1, Point loc2)
public java.util.Set<ElementType> getElements(ElementType elem, int radius)
public Geometry getLocalGeometry()
public void addRegion(Region region)
public java.util.List<Region> getRegionsContainingPoint(Point loc)
public void setMaxObjects(int max)
public int getMaxObjects()
public void setMaxDepth(int max)
public int getMaxDepth()
public boolean getSupportsExtentBasedPerceiver()
public java.util.concurrent.locks.Lock getLock()
public int getHysteresis()
public void setHysteresis(int hysteresis)
public QuadTreeNode<ElementType> addElement(ElementType elem)
public java.lang.Integer addElementReturnCountForPerceiver(ElementType elem, OID mobilePerceiverOid)
public boolean removeElement(ElementType elem)
public java.lang.Integer removeElementReturnCountForPerceiver(ElementType elem, OID mobilePerceiverOid)
public void updateElement(ElementType elem, Point loc)
elem
- loc
- protected void updatePerceiver(Perceiver<ElementType> perceiver)
public void addFixedPerceiver(FixedPerceiver<ElementType> perceiver)
public void removeFixedPerceiver(FixedPerceiver<ElementType> perceiver)
public void setLocalGeometry(Geometry g)
public java.util.Collection<ElementType> getElementPerceivables(ElementType elem)
protected QuadTreeNode<ElementType> addElementInternal(ElementType elem, QuadTree.NewsAndFrees newsAndFrees)
protected QuadTreeNode<ElementType> addHelper(QuadTreeNode<ElementType> node, ElementType elem, Point loc, QuadTree.NewsAndFrees newsAndFrees)
protected boolean removeElementInternal(ElementType elem, QuadTree.NewsAndFrees newsAndFrees)
protected void updateElementInternal(ElementType elem, Point loc, QuadTree.NewsAndFrees newsAndFrees)
protected void updateElementPerceiversInternal(ElementType elem, QuadTreeNode<ElementType> oldNode, QuadTreeNode<ElementType> newNode, QuadTree.NewsAndFrees newsAndFrees)
elem:
- the element that is movingoldNode:
- the node the element has leftnewNode:
- the node the element has enterednewsAndFrees
- protected void updatePerceiverInternal(Perceiver<ElementType> perceiver, QuadTree.NewsAndFrees newsAndFrees)
perceiver
- newsAndFrees
- protected void updatePerceiverHelper(java.util.Set<QuadTreeNode<ElementType>> nodeSet, QuadTreeNode<ElementType> node, Perceiver<ElementType> perceiver)
nodeSet
- node
- perceiver
- protected void setLocalGeometryHelper(QuadTreeNode<ElementType> node, Geometry g, QuadTree.NewsAndFrees newsAndFrees)