Merge changes Icaf1ef7f,I979c222a,I9e05ee0b,I798a4707,I7732f3ec
* changes:
Add options to PrologMain to emulate usage in Gerrit
Cleanup formatting of PrologMain
Correct usage for cafeteria java_binary()
Remove version from PrologMain header
Add missing fake_pom_deploy.xml required by buck build deploy
diff --git a/src/lang/Trail.java b/src/lang/Trail.java
index a782781..e354650 100644
--- a/src/lang/Trail.java
+++ b/src/lang/Trail.java
@@ -1,4 +1,5 @@
package com.googlecode.prolog_cafe.lang;
+
/**
* Trail stack.<br>
* The class <code>Trail</code> represents a trail stack.<br>
@@ -10,76 +11,80 @@
* @version 1.0
*/
public final class Trail {
- /** An array of <code>Undoable</code> entries. */
- private Undoable[] buffer;
+ /** An array of <code>Undoable</code> entries. */
+ private Undoable[] buffer;
- /** the top index of this <code>Trail</code>. */
- private int top;
+ /** the top index of this <code>Trail</code>. */
+ private int top;
- /** Current timestamp of the top of {@link ChoicePointStack}. */
- long timeStamp;
+ /** Current timestamp of the top of {@link ChoicePointStack}. */
+ long timeStamp;
- /** Constructs a new trail stack. */
- public Trail() {
- this(20000);
+ /** Constructs a new trail stack. */
+ public Trail() {
+ this(100);
+ }
+
+ /** Constructs a new trail stack with the given size. */
+ public Trail(int n) {
+ buffer = new Undoable[n];
+ top = -1;
+ }
+
+ /** Discards all entries. */
+ public void init() {
+ deleteAll();
+ }
+
+ /** Pushes an entry to this <code>Trail</code>. */
+ public void push(Undoable t) {
+ if (++top >= buffer.length) {
+ int len = buffer.length;
+ Undoable[] new_buffer = new Undoable[2 * len];
+ System.arraycopy(buffer, 0, new_buffer, 0, len);
+ buffer = new_buffer;
}
+ buffer[top] = t;
+ }
- /** Constructs a new trail stack with the given size. */
- public Trail(int n) {
- buffer = new Undoable[n];
- top = -1;
+ /** Pops an entry from this <code>Trail</code>. */
+ public Undoable pop() {
+ Undoable t = buffer[top];
+ buffer[top--] = null;
+ return t;
+ }
+
+ /** Discards all entries. */
+ protected void deleteAll() {
+ while (!empty()) {
+ buffer[top--] = null;
}
+ }
- /** Discards all entries. */
- public void init() { deleteAll(); }
+ /** Tests if this stack has no entry. */
+ public boolean empty() {
+ return top == -1;
+ }
- /** Pushs an entry to this <code>Trail</code>. */
- public void push(Undoable t) {
- try {
- buffer[++top] = t;
- } catch (ArrayIndexOutOfBoundsException e) {
- int len = buffer.length;
- Undoable[] new_buffer = new Undoable[len+20000];
- System.arraycopy(buffer, 0, new_buffer, 0, len);
- buffer = new_buffer;
- buffer[top] = t;
- }
+ /** Current allocation of the trail storage array. */
+ public int max() {
+ return buffer.length;
+ }
+
+ /** Returns the value of <code>top</code>.
+ * @see #top
+ */
+ public int top() {
+ return top;
+ }
+
+ /** Unwinds all entries after the value of <code>i</code>. */
+ public void unwind(int i) {
+ Undoable t;
+ while (top > i) {
+ t = pop();
+ t.undo();
}
-
- /** Pops an entry from this <code>Trail</code>. */
- public Undoable pop() {
- Undoable t = buffer[top];
- buffer[top--] = null;
- return t;
- }
-
- /** Discards all entries. */
- protected void deleteAll() {
- while (! empty()) {
- buffer[top--] = null;
- }
- }
-
- /** Tests if this stack has no entry. */
- public boolean empty() {
- return top == -1;
- }
-
- /** Current allocation of the trail storage array. */
- public int max() { return buffer.length; }
-
- /** Returns the value of <code>top</code>.
- * @see #top
- */
- public int top() { return top; }
-
- /** Unwinds all entries after the value of <code>i</code>. */
- public void unwind(int i) {
- Undoable t;
- while (top > i) {
- t = pop();
- t.undo();
- }
- }
+ }
}