diff options
Diffstat (limited to 'JPratt/src/main/java/bjc/pratt/tokens/StringTokenStream.java')
| -rw-r--r-- | JPratt/src/main/java/bjc/pratt/tokens/StringTokenStream.java | 34 |
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(); + } } |
