1 package cz.cuni.amis.pogamut.defcon.utils.quadtree;
2
3 import java.util.Iterator;
4 import java.util.LinkedList;
5 import java.util.NoSuchElementException;
6
7
8
9
10
11
12
13
14
15 public class QuadTreeBFSIterator implements Iterator<QuadTreeNode> {
16
17 private QuadTree tree;
18 private QuadTreeNode node = null;
19 private QuadTreeNode root = null;
20 private boolean finished = false;
21 private final LinkedList<QuadTreeNode> branching = new LinkedList<QuadTreeNode>();
22
23
24 public QuadTreeBFSIterator(QuadTree tree) {
25 if (tree == null)
26 throw new IllegalArgumentException("Tree cannot be null");
27
28 this.tree = tree;
29 this.root = tree.getRoot();
30 branching.addLast(root);
31 }
32
33 @Override
34 public boolean hasNext() {
35 return !branching.isEmpty();
36 }
37
38 @Override
39 public QuadTreeNode next() {
40 if (!hasNext())
41 throw new NoSuchElementException();
42
43 QuadTreeNode node = branching.pop();
44
45 if (node.getNodes() != null) {
46 for (QuadTreeNode child : node.getNodes()) {
47 branching.addLast(child);
48 }
49 }
50
51 return node;
52 }
53
54 @Override
55 public void remove() {
56 throw new UnsupportedOperationException(
57 "QuadTreeIterator does not support remove() method.");
58 }
59
60 }