# NOT A PART OF SEAMONKEY IN ANY WAY
Some new, some old filres copiedfrom Rhino to form start of prototyping environment for Project Brenda git-svn-id: svn://10.0.0.236/trunk@27571 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
58
mozilla/js/js2/java/PreorderNodeIterator.java
Normal file
58
mozilla/js/js2/java/PreorderNodeIterator.java
Normal file
@@ -0,0 +1,58 @@
|
||||
/* -*- Mode: java; tab-width: 8 -*-
|
||||
* Copyright © 1997, 1998 Netscape Communications Corporation, All Rights Reserved.
|
||||
*/
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
/**
|
||||
* This class implements a preorder tree iterator for the Node class.
|
||||
*
|
||||
* @see Node
|
||||
* @author Norris Boyd
|
||||
*/
|
||||
public class PreorderNodeIterator {
|
||||
public PreorderNodeIterator(Node n) {
|
||||
start = n;
|
||||
stack = new Stack();
|
||||
}
|
||||
|
||||
public Node currentNode() {
|
||||
return current;
|
||||
}
|
||||
|
||||
public Node getCurrentParent() {
|
||||
return currentParent;
|
||||
}
|
||||
|
||||
public Node nextNode() {
|
||||
if (current == null)
|
||||
return current = start;
|
||||
if (current.first != null) {
|
||||
stack.push(current);
|
||||
currentParent = current;
|
||||
current = current.first;
|
||||
} else {
|
||||
current = current.next;
|
||||
boolean isEmpty;
|
||||
for (;;) {
|
||||
isEmpty = stack.isEmpty();
|
||||
if (isEmpty || current != null)
|
||||
break;
|
||||
current = (Node) stack.pop();
|
||||
current = current.next;
|
||||
}
|
||||
currentParent = isEmpty ? null : (Node) stack.peek();
|
||||
}
|
||||
return current;
|
||||
}
|
||||
|
||||
public void replaceCurrent(Node newNode) {
|
||||
currentParent.replaceChild(current, newNode);
|
||||
current = newNode;
|
||||
}
|
||||
|
||||
private Node start;
|
||||
private Node current;
|
||||
private Node currentParent;
|
||||
private Stack stack;
|
||||
}
|
||||
Reference in New Issue
Block a user