package agg.attribute.parser.javaExpr;
/* Generated By:JavaCC: Do not edit this line. ASCII_CharStream.java Version 0.6 */
/**
* An implementation of interface CharStream, where the stream is assumed to
* contain only ASCII characters (without unicode processing).
*
* @version $Id: ASCII_CharStream.java,v 1.5 2010/08/23 07:31:25 olga Exp $
* @author $Author: olga $
*/
public final class ASCII_CharStream {
int bufsize;
int available;
int tokenBegin;
public int bufpos = -1;
private int bufline[];
private int bufcolumn[];
private int column = 0;
private int line = 1;
private boolean prevCharIsCR = false;
private boolean prevCharIsLF = false;
private java.io.InputStream inputStream;
private byte[] buffer;
private int maxNextCharInd = 0;
private final void ExpandBuff(boolean wrapAround) {
byte[] newbuffer = new byte[this.bufsize + 2048];
int newbufline[] = new int[this.bufsize + 2048];
int newbufcolumn[] = new int[this.bufsize + 2048];
try {
if (wrapAround) {
System.arraycopy(this.buffer, this.tokenBegin, newbuffer, 0, this.bufsize
- this.tokenBegin);
System.arraycopy(this.buffer, 0, newbuffer, this.bufsize - this.tokenBegin,
this.bufpos);
this.buffer = newbuffer;
System.arraycopy(this.bufline, this.tokenBegin, newbufline, 0, this.bufsize
- this.tokenBegin);
System.arraycopy(this.bufline, 0, newbufline, this.bufsize - this.tokenBegin,
this.bufpos);
this.bufline = newbufline;
System.arraycopy(this.bufcolumn, this.tokenBegin, newbufcolumn, 0,
this.bufsize - this.tokenBegin);
System.arraycopy(this.bufcolumn, 0, newbufcolumn, this.bufsize
- this.tokenBegin, this.bufpos);
this.bufcolumn = newbufcolumn;
this.maxNextCharInd = (this.bufpos += (this.bufsize - this.tokenBegin));
} else {
System.arraycopy(this.buffer, this.tokenBegin, newbuffer, 0, this.bufsize
- this.tokenBegin);
this.buffer = newbuffer;
System.arraycopy(this.bufline, this.tokenBegin, newbufline, 0, this.bufsize
- this.tokenBegin);
this.bufline = newbufline;
System.arraycopy(this.bufcolumn, this.tokenBegin, newbufcolumn, 0,
this.bufsize - this.tokenBegin);
this.bufcolumn = newbufcolumn;
this.maxNextCharInd = (this.bufpos -= this.tokenBegin);
}
} catch (Throwable t) {
System.out.println("Error : " + t.getClass().getName());
throw new Error();
}
this.bufsize += 2048;
this.available = this.bufsize;
this.tokenBegin = 0;
}
private final void FillBuff() throws java.io.IOException {
if (this.maxNextCharInd == this.available) {
if (this.available == this.bufsize) {
if (this.tokenBegin > 2048) {
this.bufpos = this.maxNextCharInd = 0;
this.available = this.tokenBegin;
} else if (this.tokenBegin < 0)
this.bufpos = this.maxNextCharInd = 0;
else
ExpandBuff(false);
} else if (this.available > this.tokenBegin)
this.available = this.bufsize;
else if ((this.tokenBegin - this.available) < 2048)
ExpandBuff(true);
else
this.available = this.tokenBegin;
}
int i;
if ((i = this.inputStream.read(this.buffer, this.maxNextCharInd, this.available
- this.maxNextCharInd)) == -1) {
--this.bufpos;
backup(0);
if (this.tokenBegin == -1)
this.tokenBegin = this.bufpos;
throw new java.io.IOException();
}
this.maxNextCharInd += i;
}
public final char BeginToken() throws java.io.IOException {
this.tokenBegin = -1;
char c = readChar();
this.tokenBegin = this.bufpos;
return c;
}
private final void UpdateLineColumn(char c) {
this.column++;
if (this.prevCharIsLF) {
this.prevCharIsLF = false;
this.line += (this.column = 1);
} else if (this.prevCharIsCR) {
this.prevCharIsCR = false;
if (c == '\n') {
this.prevCharIsLF = true;
} else
this.line += (this.column = 1);
}
switch (c) {
case '\r':
this.prevCharIsCR = true;
break;
case '\n':
this.prevCharIsLF = true;
break;
case '\t':
this.column += (9 - (this.column & 07));
break;
default:
break;
}
this.bufline[this.bufpos] = this.line;
this.bufcolumn[this.bufpos] = this.column;
}
private int inBuf = 0;
public final char readChar() throws java.io.IOException {
if (this.inBuf > 0) {
--this.inBuf;
return (char) ((char) 0xff & this.buffer[(this.bufpos == this.bufsize - 1) ? (this.bufpos = 0)
: ++this.bufpos]);
}
if (++this.bufpos >= this.maxNextCharInd)
FillBuff();
char c = (char) ((char) 0xff & this.buffer[this.bufpos]);
UpdateLineColumn(c);
return (c);
}
/**
* @deprecated
* @see #getEndColumn
*/
public final int getColumn() {
return this.bufcolumn[this.bufpos];
}
/**
* @deprecated
* @see #getEndLine
*/
public final int getLine() {
return this.bufline[this.bufpos];
}
public final int getEndColumn() {
return this.bufcolumn[this.bufpos];
}
public final int getEndLine() {
return this.bufline[this.bufpos];
}
public final int getBeginColumn() {
return this.bufcolumn[this.tokenBegin];
}
public final int getBeginLine() {
return this.bufline[this.tokenBegin];
}
public final void backup(int amount) {
this.inBuf += amount;
if ((this.bufpos -= amount) < 0)
this.bufpos += this.bufsize;
}
public ASCII_CharStream(java.io.InputStream dstream, int startline,
int startcolumn, int buffersize) {
this.inputStream = dstream;
this.line = startline;
this.column = startcolumn - 1;
this.available = this.bufsize = buffersize;
this.buffer = new byte[buffersize];
this.bufline = new int[buffersize];
this.bufcolumn = new int[buffersize];
}
public ASCII_CharStream(java.io.InputStream dstream, int startline,
int startcolumn) {
this.inputStream = dstream;
this.line = startline;
this.column = startcolumn - 1;
this.available = this.bufsize = 4096;
this.buffer = new byte[4096];
this.bufline = new int[4096];
this.bufcolumn = new int[4096];
}
public final String GetImage() {
if (this.bufpos >= this.tokenBegin)
return new String(this.buffer, this.tokenBegin, this.bufpos - this.tokenBegin + 1);
return new String(this.buffer, this.tokenBegin, this.bufsize - this.tokenBegin)
+ new String(this.buffer, 0, this.bufpos + 1);
}
public final byte[] GetSuffix(int len) {
byte[] ret = new byte[len];
if ((this.bufpos + 1) >= len)
System.arraycopy(this.buffer, this.bufpos - len + 1, ret, 0, len);
else {
System.arraycopy(this.buffer, this.bufsize - (len - this.bufpos - 1), ret, 0, len
- this.bufpos - 1);
System.arraycopy(this.buffer, 0, ret, len - this.bufpos - 1, this.bufpos + 1);
}
return ret;
}
public void Done() {
this.buffer = null;
this.bufline = null;
this.bufcolumn = null;
}
}
/*
* $Log: ASCII_CharStream.java,v $
* Revision 1.5 2010/08/23 07:31:25 olga
* tuning
*
* Revision 1.4 2010/03/08 15:38:02 olga
* code optimizing
*
* Revision 1.3 2007/09/10 13:05:48 olga
* In this update:
* - package xerces2.5.0 is not used anymore;
* - class com.objectspace.jgl.Pair is replaced by the agg own generic class agg.util.Pair;
* - bugs fixed in: usage of PACs in rules; match completion;
* usage of static method calls in attr. conditions
* - graph editing: added some new features
* Revision 1.2 2006/08/09 07:42:18 olga API
* docu
*
* Revision 1.1 2005/08/25 11:56:52 enrico *** empty log message ***
*
* Revision 1.1 2005/05/30 12:58:01 olga Version with Eclipse
*
* Revision 1.2 2002/09/23 12:23:57 komm added type graph in xt_basis, editor
* and GUI
*
* Revision 1.1.1.1 2002/07/11 12:17:03 olga Imported sources
*
* Revision 1.7 2000/03/14 10:58:38 shultzke Transformieren von Variablen auf
* Variablen sollte jetzt funktionieren Ueber das Design der Copy-Methode des
* abstrakten Syntaxbaumes sollte unbedingt diskutiert werden.
*
*/