public void visit(FloatRectangle region, IQuadTreeElementsVisitor<E> visitor) { region = bounds.intersection(region); if (region.isEmpty()) return; if (isLeaf()) { if (bounds.equals(region)) for (FloatPoint location : contents.keySet()) visitor.visit(this, location, contents.get(location)); else for (FloatPoint location : contents.keySet()) if (region.contains(location)) visitor.visit(this, location, contents.get(location)); } else { for (QuadTree<E> quadrant : quadrants) quadrant.visit(region, visitor); } }