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 */
013 package org.jikesrvm.compilers.opt.util;
014
015 import java.util.Enumeration;
016
017
018 /**
019 * This class is a node in a tree. Both up and down pointers are used.
020 */
021 public class TreeNode {
022
023 /**
024 * The parent of this node
025 */
026 private TreeNode parent;
027
028 /**
029 * The first (leftmost) child
030 */
031 private TreeNode leftChild;
032
033 /**
034 * The next node on the child list that I am on
035 */
036 private TreeNode rightSibling;
037
038 /**
039 * Constructor
040 */
041 public TreeNode() {
042 parent = null;
043 leftChild = null;
044 rightSibling = null;
045 }
046
047 /**
048 * return the parent of this node
049 * @return my parent
050 */
051 public TreeNode getParent() {
052 return parent;
053 }
054
055 /**
056 * returns the first child of this node
057 * @return the first child of this node
058 */
059 public TreeNode getLeftChild() {
060 return leftChild;
061 }
062
063 /**
064 * returns the next node with the same parent as me
065 * @return the next node with the same parent as me
066 */
067 public TreeNode getRightSibling() {
068 return rightSibling;
069 }
070
071 /**
072 * adds a child to this node
073 * @param node the new child
074 */
075 public void addChild(TreeNode node) {
076 if (leftChild == null) {
077 leftChild = node;
078 } else {
079 // get to the last sibling
080 TreeNode siblingNode = leftChild;
081 while (siblingNode.rightSibling != null) {
082 siblingNode = siblingNode.rightSibling;
083 }
084 siblingNode.rightSibling = node;
085 }
086 node.parent = this;
087 }
088
089 /**
090 * Sets all tree pointers to null
091 */
092 public void clear() {
093 leftChild = null;
094 rightSibling = null;
095 parent = null;
096 }
097
098 public Enumeration<TreeNode> getChildren() {
099 return new TreeNodeChildrenEnumerator(this);
100 }
101
102 }
103
104
105