summaryrefslogtreecommitdiff
path: root/JPratt/src/main/java/bjc/pratt/tokens/StringTokenStream.java
diff options
context:
space:
mode:
Diffstat (limited to 'JPratt/src/main/java/bjc/pratt/tokens/StringTokenStream.java')
-rw-r--r--JPratt/src/main/java/bjc/pratt/tokens/StringTokenStream.java34
1 files changed, 30 insertions, 4 deletions
diff --git a/JPratt/src/main/java/bjc/pratt/tokens/StringTokenStream.java b/JPratt/src/main/java/bjc/pratt/tokens/StringTokenStream.java
index 044d19a..8c7fcec 100644
--- a/JPratt/src/main/java/bjc/pratt/tokens/StringTokenStream.java
+++ b/JPratt/src/main/java/bjc/pratt/tokens/StringTokenStream.java
@@ -4,6 +4,8 @@ import static bjc.pratt.tokens.StringToken.litToken;
import java.util.Iterator;
+import bjc.data.MarkListIterator;
+
/**
* Simple implementation of token stream for strings.
*
@@ -14,8 +16,8 @@ import java.util.Iterator;
*
*/
public class StringTokenStream extends TokenStream<String, String> {
- private final Iterator<Token<String, String>> iter;
-
+ private final MarkListIterator<Token<String, String>> iter;
+
private Token<String, String> curr;
/**
@@ -26,8 +28,7 @@ public class StringTokenStream extends TokenStream<String, String> {
*
*/
public StringTokenStream(final Iterator<Token<String, String>> itr) {
- iter = itr;
-
+ iter = new MarkListIterator<>(itr);
}
@Override
@@ -50,4 +51,29 @@ public class StringTokenStream extends TokenStream<String, String> {
public boolean hasNext() {
return iter.hasNext();
}
+
+ @Override
+ public void mark() {
+ iter.mark();
+ }
+
+ @Override
+ public void commit() {
+ iter.commit();
+
+ if (!iter.hasMark()) {
+ // No marks outstanding; we can release the previous state
+ iter.reset();
+ }
+ }
+
+ @Override
+ public void rollback() {
+ iter.rollback();
+ }
+
+ @Override
+ public boolean hasMark() {
+ return iter.hasMark();
+ }
}