01: /*******************************************************************************
02: * Copyright (c) 2000, 2006 IBM Corporation and others.
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * IBM Corporation - initial API and implementation
10: *******************************************************************************/package org.eclipse.text.edits;
11:
12: import org.eclipse.core.runtime.Assert;
13:
14: class TreeIterationInfo {
15:
16: interface Visitor {
17: void visit(TextEdit edit);
18: }
19:
20: private int fMark = -1;
21: private TextEdit[][] fEditStack = new TextEdit[10][];
22: private int[] fIndexStack = new int[10];
23:
24: public int getSize() {
25: return fMark + 1;
26: }
27:
28: public void push(TextEdit[] edits) {
29: if (++fMark == fEditStack.length) {
30: TextEdit[][] t1 = new TextEdit[fEditStack.length * 2][];
31: System.arraycopy(fEditStack, 0, t1, 0, fEditStack.length);
32: fEditStack = t1;
33: int[] t2 = new int[fEditStack.length];
34: System.arraycopy(fIndexStack, 0, t2, 0, fIndexStack.length);
35: fIndexStack = t2;
36: }
37: fEditStack[fMark] = edits;
38: fIndexStack[fMark] = -1;
39: }
40:
41: public void setIndex(int index) {
42: fIndexStack[fMark] = index;
43: }
44:
45: public void pop() {
46: fEditStack[fMark] = null;
47: fIndexStack[fMark] = -1;
48: fMark--;
49: }
50:
51: public void accept(Visitor visitor) {
52: for (int i = fMark; i >= 0; i--) {
53: Assert.isTrue(fIndexStack[i] >= 0);
54: int start = fIndexStack[i] + 1;
55: TextEdit[] edits = fEditStack[i];
56: for (int s = start; s < edits.length; s++) {
57: visitor.visit(edits[s]);
58: }
59: }
60: }
61: }
|