gt:     bufline = new int[buffersize];
context: /*******************************************************************************
   * Copyright (C) 2013 Andrei Olaru, Marius-Tudor Benea, Nguyen Thi Thuy Nga, Amal El Fallah Seghrouchni, Cedric Herpson.
   * 
   * This file is part of tATAmI-PC.
   * 
   * tATAmI-PC is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.
   * 
   * tATAmI-PC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
   * 
   * You should have received a copy of the GNU Lesser General Public License along with tATAmI-PC.  If not, see <http://www.gnu.org/licenses/>.
   ******************************************************************************/
  /* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 3.0 */
  package testing.planning.graphplan.parser;
  
  /**
   * An implementation of interface CharStream, where the stream is assumed to
   * contain only ASCII characters (without unicode processing).
   */
  
  public class SimpleCharStream
  {
    public static final boolean staticFlag = true;
    static int bufsize;
    static int available;
    static int tokenBegin;
    static public int bufpos = -1;
    static protected int bufline[];
    static protected int bufcolumn[];
  
    static protected int column = 0;
    static protected int line = 1;
  
    static protected boolean prevCharIsCR = false;
    static protected boolean prevCharIsLF = false;
  
    static protected java.io.Reader inputStream;
  
    static protected char[] buffer;
    static protected int maxNextCharInd = 0;
    static protected int inBuf = 0;
  
    static protected void ExpandBuff(boolean wrapAround)
    {
       char[] newbuffer = new char[bufsize + 2048];
       int newbufline[] = new int[bufsize + 2048];
       int newbufcolumn[] = new int[bufsize + 2048];
  
       try
       {
          if (wrapAround)
          {
             System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
             System.arraycopy(buffer, 0, newbuffer,
                                               bufsize - tokenBegin, bufpos);
             buffer = newbuffer;
  
             System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
             System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
             bufline = newbufline;
  
             System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
             System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
             bufcolumn = newbufcolumn;
  
             maxNextCharInd = (bufpos += (bufsize - tokenBegin));
          }
          else
          {
             System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
             buffer = newbuffer;
  
             System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
             bufline = newbufline;
  
             System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
             bufcolumn = newbufcolumn;
  
             maxNextCharInd = (bufpos -= tokenBegin);
          }
       }
       catch (Throwable t)
       {
          throw new Error(t.getMessage());
       }
  
  
       bufsize += 2048;
       available = bufsize;
       tokenBegin = 0;
    }
  
    static protected void FillBuff() throws java.io.IOException
    {
       if (maxNextCharInd == available)
       {
          if (available == bufsize)
          {
             if (tokenBegin > 2048)
             {
                bufpos = maxNextCharInd = 0;
                available = tokenBegin;
             }
             else if (tokenBegin < 0)
                bufpos = maxNextCharInd = 0;
             else
                ExpandBuff(false);
          }
          else if (available > tokenBegin)
             available = bufsize;
          else if ((tokenBegin - available) < 2048)
             ExpandBuff(true);
          else
             available = tokenBegin;
       }
  
       int i;
       try {
          if ((i = inputStream.read(buffer, maxNextCharInd,
                                      available - maxNextCharInd)) == -1)
          {
             inputStream.close();
             throw new java.io.IOException();
          }
          else
             maxNextCharInd += i;
          return;
       }
       catch(java.io.IOException e) {
          --bufpos;
          backup(0);
          if (tokenBegin == -1)
             tokenBegin = bufpos;
          throw e;
       }
    }
  
    static public char BeginToken() throws java.io.IOException
    {
       tokenBegin = -1;
       char c = readChar();
       tokenBegin = bufpos;
  
       return c;
    }
  
    static protected void UpdateLineColumn(char c)
    {
       column++;
  
       if (prevCharIsLF)
       {
          prevCharIsLF = false;
          line += (column = 1);
       }
       else if (prevCharIsCR)
       {
          prevCharIsCR = false;
          if (c == '\n')
          {
             prevCharIsLF = true;
          }
          else
             line += (column = 1);
       }
  
       switch (c)
       {
          case '\r' :
             prevCharIsCR = true;
             break;
          case '\n' :
             prevCharIsLF = true;
             break;
          case '\t' :
             column--;
             column += (8 - (column & 07));
             break;
          default :
             break;
       }
  
       bufline[bufpos] = line;
       bufcolumn[bufpos] = column;
    }
  
    static public char readChar() throws java.io.IOException
    {
       if (inBuf > 0)
       {
          --inBuf;
  
          if (++bufpos == bufsize)
             bufpos = 0;
  
          return buffer[bufpos];
       }
  
       if (++bufpos >= maxNextCharInd)
          FillBuff();
  
       char c = buffer[bufpos];
  
       UpdateLineColumn(c);
       return (c);
    }
  
    /**
     * @deprecated 
     * @see #getEndColumn
     */
  
    static public int getColumn() {
       return bufcolumn[bufpos];
    }
  
    /**
     * @deprecated 
     * @see #getEndLine
     */
  
    static public int getLine() {
       return bufline[bufpos];
    }
  
    static public int getEndColumn() {
       return bufcolumn[bufpos];
    }
  
    static public int getEndLine() {
       return bufline[bufpos];
    }
  
    static public int getBeginColumn() {
       return bufcolumn[tokenBegin];
    }
  
    static public int getBeginLine() {
       return bufline[tokenBegin];
    }
  
    static public void backup(int amount) {
  
      inBuf += amount;
      if ((bufpos -= amount) < 0)
         bufpos += bufsize;
    }
  
    public SimpleCharStream(java.io.Reader dstream, int startline,
    int startcolumn, int buffersize)
    {
      if (inputStream != null)
         throw new Error("\n   ERROR: Second call to the constructor of a static SimpleCharStream.  You must\n" +
         "       either use ReInit() or set the JavaCC option STATIC to false\n" +
         "       during the generation of this class.");
      inputStream = dstream;
      line = startline;
      column = startcolumn - 1;
  
      available = bufsize = buffersize;
      buffer = new char[buffersize];
  