001
002 package com.javadoq.javadoc;
003
004 public class JJTJavadocParserState {
005 private java.util.List<Node> nodes;
006 private java.util.List<Integer> marks;
007
008 private int sp; private int mk; private boolean node_created;
011
012 public JJTJavadocParserState() {
013 nodes = new java.util.ArrayList<Node>();
014 marks = new java.util.ArrayList<Integer>();
015 sp = 0;
016 mk = 0;
017 }
018
019
022 public boolean nodeCreated() {
023 return node_created;
024 }
025
026
028 public void reset() {
029 nodes.clear();
030 marks.clear();
031 sp = 0;
032 mk = 0;
033 }
034
035
037 public Node rootNode() {
038 return nodes.get(0);
039 }
040
041
042 public void pushNode(Node n) {
043 nodes.add(n);
044 ++sp;
045 }
046
047
049 public Node popNode() {
050 if (--sp < mk) {
051 mk = marks.remove(marks.size()-1);
052 }
053 return nodes.remove(nodes.size()-1);
054 }
055
056
057 public Node peekNode() {
058 return nodes.get(nodes.size()-1);
059 }
060
061
063 public int nodeArity() {
064 return sp - mk;
065 }
066
067
068 public void clearNodeScope(Node n) {
069 while (sp > mk) {
070 popNode();
071 }
072 mk = marks.remove(marks.size()-1);
073 }
074
075
076 public void openNodeScope(Node n) {
077 marks.add(mk);
078 mk = sp;
079 n.jjtOpen();
080 }
081
082
083
087 public void closeNodeScope(Node n, int num) {
088 mk = marks.remove(marks.size()-1);
089 while (num-- > 0) {
090 Node c = popNode();
091 c.jjtSetParent(n);
092 n.jjtAddChild(c, num);
093 }
094 n.jjtClose();
095 pushNode(n);
096 node_created = true;
097 }
098
099
100
105 public void closeNodeScope(Node n, boolean condition) {
106 if (condition) {
107 int a = nodeArity();
108 mk = marks.remove(marks.size()-1);
109 while (a-- > 0) {
110 Node c = popNode();
111 c.jjtSetParent(n);
112 n.jjtAddChild(c, a);
113 }
114 n.jjtClose();
115 pushNode(n);
116 node_created = true;
117 } else {
118 mk = marks.remove(marks.size()-1);
119 node_created = false;
120 }
121 }
122 }