001/* 002 * This file is part of the Jikes RVM project (http://jikesrvm.org). 003 * 004 * This file is licensed to You under the Eclipse Public License (EPL); 005 * You may not use this file except in compliance with the License. You 006 * may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/eclipse-1.0.php 009 * 010 * See the COPYRIGHT.txt file distributed with this work for information 011 * regarding copyright ownership. 012 */ 013package org.jikesrvm.compilers.opt.util; 014 015import java.util.Enumeration; 016import java.util.NoSuchElementException; 017 018 019/** 020 * This class provides enumeration of all children of a TreeNode 021 */ 022final class TreeNodeChildrenEnumerator implements Enumeration<TreeNode> { 023 024 /** 025 * the current child we are working on 026 */ 027 private TreeNode currentChild; 028 029 /** 030 * Provides iteration over a list of children tree nodes 031 * @param node Root of the tree to iterate over. 032 */ 033 TreeNodeChildrenEnumerator(TreeNode node) { 034 // start at the first child 035 currentChild = node.getLeftChild(); 036 } 037 038 /** 039 * any elements left? 040 * @return whether there are any elements left 041 */ 042 @Override 043 public boolean hasMoreElements() { 044 return currentChild != null; 045 } 046 047 /** 048 * returns the next element in the list iterator 049 * @return the next element in the list iterator or null 050 */ 051 @Override 052 public TreeNode nextElement() { 053 // save the return value 054 TreeNode returnValue = currentChild; 055 056 // update the currentChild pointer, if possible 057 if (currentChild != null) { 058 currentChild = currentChild.getRightSibling(); 059 } else { 060 throw new NoSuchElementException("TreeNodeChildrenEnumerator"); 061 } 062 063 // return the value 064 return returnValue; 065 } 066}