Mercurial > hg > Members > shoshi > TreeCMS > TreeCMSPrototype1
view src/treecms/proto/test/PreOrderTreeWalkerRecursive.java @ 13:3bccd745f2e2
bug fix
author | shoshi |
---|---|
date | Sun, 29 Aug 2010 12:07:03 +0900 |
parents | 18f696e9fc1e |
children |
line wrap: on
line source
package treecms.proto.test; import java.util.Iterator; import java.util.LinkedList; import treecms.proto.api.NodeAPI; public class PreOrderTreeWalkerRecursive implements Iterable<NodeAPI> { private NodeAPI m_root; public PreOrderTreeWalkerRecursive(NodeAPI _root) { m_root = _root; } @Override public Iterator<NodeAPI> iterator() { // TODO Auto-generated method stub return new PreOrderRecursiveIterator(m_root); } class PreOrderRecursiveIterator implements Iterator<NodeAPI> { private NodeAPI m_root; private LinkedList<Iterator<NodeAPI>> m_itrList; private int m_pos; public PreOrderRecursiveIterator(NodeAPI _root) { m_root = _root; m_itrList = new LinkedList<Iterator<NodeAPI>>(); for(NodeAPI child : m_root.getChildList()){ Iterator<NodeAPI> itr = new PreOrderRecursiveIterator(child); m_itrList.add(itr); } m_pos = -1; } @Override public boolean hasNext() { // TODO Auto-generated method stub int pos = m_pos; if(pos < 0){ return true; } while(pos < m_itrList.size()){ if(m_itrList.get(pos).hasNext()){ return true; } pos++; } return false; } @Override public NodeAPI next() { // TODO Auto-generated method stub if(m_pos < 0){ m_pos ++; return m_root; } while(m_pos < m_itrList.size()){ NodeAPI next = m_itrList.get(m_pos).next(); if(next != null){ return next; } m_pos ++; } return null; } @Override public void remove() { // TODO Auto-generated method stub throw new UnsupportedOperationException("cant remove from itrerator"); } } }