Mercurial > hg > Members > shoshi > TreeCMS > TreeCMSPrototype1
diff 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 diff
--- a/src/treecms/proto/test/PreOrderTreeWalkerRecursive.java Sun Aug 29 00:11:08 2010 +0900 +++ b/src/treecms/proto/test/PreOrderTreeWalkerRecursive.java Sun Aug 29 12:07:03 2010 +0900 @@ -1,5 +1,90 @@ 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); + } -public class PreOrderTreeWalkerRecursive { + 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"); + } + + } }