/*
* This file is part of the Jikes RVM project (http://jikesrvm.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License. You
* may obtain a copy of the License at
*
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership.
*/
package org.jikesrvm.compilers.opt.util;
import java.util.Enumeration;
/**
* This class is a node in a tree. Both up and down pointers are used.
*/
public class TreeNode {
/**
* The parent of this node
*/
private TreeNode parent;
/**
* The first (leftmost) child
*/
private TreeNode leftChild;
/**
* The next node on the child list that I am on
*/
private TreeNode rightSibling;
/**
* Constructor
*/
public TreeNode() {
parent = null;
leftChild = null;
rightSibling = null;
}
/**
* return the parent of this node
* @return my parent
*/
public TreeNode getParent() {
return parent;
}
/**
* returns the first child of this node
* @return the first child of this node
*/
public TreeNode getLeftChild() {
return leftChild;
}
/**
* returns the next node with the same parent as me
* @return the next node with the same parent as me
*/
public TreeNode getRightSibling() {
return rightSibling;
}
/**
* adds a child to this node
* @param node the new child
*/
public void addChild(TreeNode node) {
if (leftChild == null) {
leftChild = node;
} else {
// get to the last sibling
TreeNode siblingNode = leftChild;
while (siblingNode.rightSibling != null) {
siblingNode = siblingNode.rightSibling;
}
siblingNode.rightSibling = node;
}
node.parent = this;
}
/**
* Sets all tree pointers to null
*/
public void clear() {
leftChild = null;
rightSibling = null;
parent = null;
}
public Enumeration<TreeNode> getChildren() {
return new TreeNodeChildrenEnumerator(this);
}
}