package org.watertemplate.interpreter.parser; import org.watertemplate.interpreter.parser.exception.NoMoreTokensOnStreamException; import java.util.Arrays; import java.util.List; class TokenStream { private final List<Token> tokens; private int currentTokenPosition; TokenStream(final Token... tokens) { this(Arrays.asList(tokens)); } TokenStream(final List<Token> tokens) { this.tokens = tokens; currentTokenPosition = 0; } boolean hasAny() { return !tokens.isEmpty(); } public Token current() throws NoMoreTokensOnStreamException { if (currentTokenPosition >= tokens.size()) { throw new NoMoreTokensOnStreamException(); } return tokens.get(currentTokenPosition); } public void reset(int save) { currentTokenPosition = save; } public void shift() { currentTokenPosition++; } public int remaining() { return tokens.size() - currentTokenPosition; } public int getCurrentTokenPosition() { return currentTokenPosition; } }