Change local stack to be member field for reuse, and add documentation for both private stacks
This commit is contained in:
parent
510ee1e705
commit
6523d469cc
25
Quadtree.cs
25
Quadtree.cs
@ -47,8 +47,16 @@ namespace Quadtree
|
||||
/// </summary>
|
||||
private float m_maxObjectRadius;
|
||||
|
||||
/// <summary>
|
||||
/// Stack of vertex indices with their bounding boxes. It is reused for each query.
|
||||
/// </summary>
|
||||
private Stack<QuadtreeQuery> _queryStack;
|
||||
|
||||
/// <summary>
|
||||
/// Stack of vertex indices. It is reused for each query.
|
||||
/// </summary>
|
||||
private Stack<int> _vertexStack;
|
||||
|
||||
public Quadtree(int maxLeafSize, int maxTreeDepth)
|
||||
{
|
||||
m_maxLeafSize = maxLeafSize;
|
||||
@ -58,6 +66,7 @@ namespace Quadtree
|
||||
m_rootBoundingBox = new BoundingBox2(Vector2.Zero, Vector2.Zero);
|
||||
m_maxObjectRadius = 0f;
|
||||
_queryStack = new Stack<QuadtreeQuery>();
|
||||
_vertexStack = new Stack<int>();
|
||||
}
|
||||
|
||||
public void Add(IWorldObject obj)
|
||||
@ -347,21 +356,19 @@ namespace Quadtree
|
||||
|
||||
private void QueryAppendContainedItems(int vertexIndex, BoundingBox2 box, List<IWorldObject> resultList)
|
||||
{
|
||||
// TODO: Stack as reused member variable?
|
||||
Stack<int> stack = new Stack<int>();
|
||||
stack.Push(vertexIndex);
|
||||
_vertexStack.Push(vertexIndex);
|
||||
|
||||
while (stack.Count > 0)
|
||||
while (_vertexStack.Count > 0)
|
||||
{
|
||||
int current = stack.Pop();
|
||||
int current = _vertexStack.Pop();
|
||||
if (m_vertices[current].ChildCount == -1)
|
||||
{
|
||||
// Branches into all vertices until leaves are found.
|
||||
int childIndex = m_vertices[current].FirstChildIndex;
|
||||
stack.Push(childIndex++);
|
||||
stack.Push(childIndex++);
|
||||
stack.Push(childIndex++);
|
||||
stack.Push(childIndex);
|
||||
_vertexStack.Push(childIndex++);
|
||||
_vertexStack.Push(childIndex++);
|
||||
_vertexStack.Push(childIndex++);
|
||||
_vertexStack.Push(childIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user