001: package org.objectweb.celtix.tools.common.toolspec.parser;
002:
003: import java.util.logging.Level;
004: import java.util.logging.Logger;
005:
006: import org.objectweb.celtix.common.logging.LogUtils;
007:
008: public class TokenInputStream {
009:
010: private static final Logger LOG = LogUtils
011: .getL7dLogger(TokenInputStream.class);
012: private final String[] tokens;
013: private int pos;
014:
015: public TokenInputStream(String[] t) {
016: this .tokens = t;
017: }
018:
019: public String read() {
020: if (LOG.isLoggable(Level.INFO)) {
021: LOG.info("Reading token " + tokens[pos]);
022: }
023: return tokens[pos++];
024: }
025:
026: public String readNext() {
027: return read(pos++);
028: }
029:
030: public String read(int position) {
031: if (position < 0) {
032: pos = 0;
033: }
034: if (position > tokens.length) {
035: pos = tokens.length - 1;
036: }
037: return tokens[pos];
038: }
039:
040: public String readPre() {
041: if (pos != 0) {
042: pos--;
043: }
044: return tokens[pos];
045: }
046:
047: public String peek() {
048: if (LOG.isLoggable(Level.INFO)) {
049: LOG.info("Peeking token " + tokens[pos]);
050: }
051: return tokens[pos];
052: }
053:
054: public String peekPre() {
055: if (pos == 0) {
056: return tokens[pos];
057: }
058: return tokens[pos - 1];
059: }
060:
061: public String peek(int position) {
062: if (position < 0) {
063: return tokens[0];
064: }
065: if (position > tokens.length) {
066: return tokens[tokens.length - 1];
067: }
068: return tokens[position];
069: }
070:
071: public int getPosition() {
072: return pos;
073: }
074:
075: public void setPosition(int p) {
076: this .pos = p;
077: }
078:
079: public int available() {
080: return tokens.length - pos;
081: }
082:
083: public boolean hasNext() {
084: return available() > 1;
085: }
086:
087: public boolean isOutOfBound() {
088: return pos >= tokens.length;
089: }
090:
091: public String toString() {
092: StringBuffer sb = new StringBuffer("[ ");
093:
094: for (int i = pos; i < tokens.length; i++) {
095: sb.append(tokens[i]);
096: if (i < tokens.length - 1) {
097: sb.append(" ");
098: }
099: }
100: sb.append(" ]");
101: return sb.toString();
102: }
103:
104: }
|