// Decompiled by: Fernflower v0.6
// Date: 16.01.2011 23:16:12
// Copyright: 2008-2009, Stiver
// Home page: http://www.reversed-java.com
package org.antlr.runtime;
import java.util.ArrayList;
import java.util.List;
import org.antlr.runtime.CharStream;
import org.antlr.runtime.CharStreamState;
public class ANTLRStringStream implements CharStream {
protected char[] data;
protected int n;
protected int p;
protected int line;
protected int charPositionInLine;
protected int markDepth;
protected List markers;
protected int lastMarker;
public String name;
public ANTLRStringStream() {
this.p = 0;
this.line = 1;
this.charPositionInLine = 0;
this.markDepth = 0;
}
public ANTLRStringStream(String var1) {
this();
this.data = var1.toCharArray();
this.n = var1.length();
}
public ANTLRStringStream(char[] var1, int var2) {
this();
this.data = var1;
this.n = var2;
}
public void reset() {
this.p = 0;
this.line = 1;
this.charPositionInLine = 0;
this.markDepth = 0;
}
public void consume() {
if(this.p < this.n) {
++this.charPositionInLine;
if(this.data[this.p] == 10) {
++this.line;
this.charPositionInLine = 0;
}
++this.p;
}
}
public int LA(int var1) {
if(var1 == 0) {
return 0;
} else {
if(var1 < 0) {
++var1;
if(this.p + var1 - 1 < 0) {
return -1;
}
}
return this.p + var1 - 1 >= this.n?-1:this.data[this.p + var1 - 1];
}
}
public int LT(int var1) {
return this.LA(var1);
}
public int index() {
return this.p;
}
public int size() {
return this.n;
}
public int mark() {
if(this.markers == null) {
this.markers = new ArrayList();
this.markers.add((Object)null);
}
++this.markDepth;
CharStreamState var1 = null;
if(this.markDepth >= this.markers.size()) {
var1 = new CharStreamState();
this.markers.add(var1);
} else {
var1 = (CharStreamState)this.markers.get(this.markDepth);
}
var1.p = this.p;
var1.line = this.line;
var1.charPositionInLine = this.charPositionInLine;
this.lastMarker = this.markDepth;
return this.markDepth;
}
public void rewind(int var1) {
CharStreamState var2 = (CharStreamState)this.markers.get(var1);
this.seek(var2.p);
this.line = var2.line;
this.charPositionInLine = var2.charPositionInLine;
this.release(var1);
}
public void rewind() {
this.rewind(this.lastMarker);
}
public void release(int var1) {
this.markDepth = var1;
--this.markDepth;
}
public void seek(int var1) {
if(var1 <= this.p) {
this.p = var1;
} else {
while(this.p < var1) {
this.consume();
}
}
}
public String substring(int var1, int var2) {
return new String(this.data, var1, var2 - var1 + 1);
}
public int getLine() {
return this.line;
}
public int getCharPositionInLine() {
return this.charPositionInLine;
}
public void setLine(int var1) {
this.line = var1;
}
public void setCharPositionInLine(int var1) {
this.charPositionInLine = var1;
}
public String getSourceName() {
return this.name;
}
}