diff --git a/Quadtree.cs b/Quadtree.cs
index 99a7869..db1036a 100644
--- a/Quadtree.cs
+++ b/Quadtree.cs
@@ -47,8 +47,16 @@ namespace Quadtree
///
private float m_maxObjectRadius;
+ ///
+ /// Stack of vertex indices with their bounding boxes. It is reused for each query.
+ ///
private Stack _queryStack;
+ ///
+ /// Stack of vertex indices. It is reused for each query.
+ ///
+ private Stack _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();
+ _vertexStack = new Stack();
}
public void Add(IWorldObject obj)
@@ -347,21 +356,19 @@ namespace Quadtree
private void QueryAppendContainedItems(int vertexIndex, BoundingBox2 box, List resultList)
{
- // TODO: Stack as reused member variable?
- Stack stack = new Stack();
- 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
{