package com.quantum.sql.parser; public class StringPointer { char[] value; int offset = 0; int mark = 0; public StringPointer(String s) { value = s.toCharArray(); } /** * Returns the next character. Will return 0 if at end of file, but that's not * checkeable because it can be a valid character. You should check with isDone(); * @return */ public char getNext() { char retVal = (offset < value.length) ? value[offset] : 0; offset++; return retVal; } /** * Returns the next character, without advancing the pointer. * Will return 0 if at end of file, but that's not * checkeable because it can be a valid character. You should check with isDone(); * @return */ public char peek() { char retVal = (offset < value.length) ? value[offset] : 0; return retVal; } /** * Marks a poing of the stream to come back later (using reset()); */ public void mark() { mark = offset; } /** * Returns to a previously marked (with mark()) place. */ public void reset() { offset = mark; } /** * Sets the pointer back a character, in fact 'pop'ing it back to the stream; */ public void back() { if (offset > 0) offset--; } public int getOffset() { return offset; } /** * @return true if the stream is at an end */ public boolean isDone() { return offset >= value.length; } public int getLength() { return value.length; } }