View Javadoc

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    * Allows user to iterate over
9    * {@link cz.cuni.amis.pogamut.defcon.utils.quadtree.QuadTree}s, in a BFS
10   * manner.
11   * 
12   * @author Radek 'Black_Hand' Pibil
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  }