Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / real-world application / MyDerby-10.3 / java / engine / org / apache / derby / impl / sql / compile / UCode_CharStream.java
diff --git a/JMCR-Stable/real-world application/MyDerby-10.3/java/engine/org/apache/derby/impl/sql/compile/UCode_CharStream.java b/JMCR-Stable/real-world application/MyDerby-10.3/java/engine/org/apache/derby/impl/sql/compile/UCode_CharStream.java
new file mode 100644 (file)
index 0000000..af6f83f
--- /dev/null
@@ -0,0 +1,476 @@
+/*\r
+\r
+   Derby - Class org.apache.derby.impl.sql.compile.UCode_CharStream\r
+\r
+   Licensed to the Apache Software Foundation (ASF) under one or more\r
+   contributor license agreements.  See the NOTICE file distributed with\r
+   this work for additional information regarding copyright ownership.\r
+   The ASF licenses this file to you under the Apache License, Version 2.0\r
+   (the "License"); you may not use this file except in compliance with\r
+   the License.  You may obtain a copy of the License at\r
+\r
+      http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
+\r
+ */\r
+\r
+/* Generated By:JavaCC: Do not edit this line. UCode_CharStream.java Version 0.7pre6 */\r
+package org.apache.derby.impl.sql.compile;\r
+\r
+/**\r
+ * An implementation of interface CharStream, where the stream is assumed to\r
+ * contain only Unicode characters.\r
+ */\r
+\r
+// NOTE: This class was modified to support the ability to get all the\r
+// characters in the input stream between two tokens.  - Jeff\r
+\r
+public final class UCode_CharStream implements CharStream\r
+{\r
+  // The next two lines are added to support ability to get the input\r
+  // between two tokens.\r
+  int charCnt;\r
+  int[] charOffset;\r
+\r
+  public static final boolean staticFlag = false;\r
+  public int bufpos = -1;\r
+  int bufsize;\r
+  int available;\r
+  int tokenBegin;\r
+  private int bufline[];\r
+  private int bufcolumn[];\r
+\r
+  private int column = 0;\r
+  private int line = 1;\r
+\r
+  private boolean prevCharIsCR = false;\r
+  private boolean prevCharIsLF = false;\r
+\r
+  private java.io.Reader inputStream;\r
+\r
+  private char[] nextCharBuf;\r
+  private char[] buffer;\r
+  private int maxNextCharInd = 0;\r
+  private int nextCharInd = -1;\r
+\r
+  private final void ExpandBuff(boolean wrapAround)\r
+  {\r
+     char[] newbuffer = new char[bufsize + 2048];\r
+     int newbufline[] = new int[bufsize + 2048];\r
+     int newbufcolumn[] = new int[bufsize + 2048];\r
+\r
+       // The next line was added to support ability to get the input\r
+       // between two tokens.\r
+       int newcharOffset[] = new int[bufsize + 2048];\r
+\r
+     try\r
+     {\r
+        if (wrapAround)\r
+        {\r
+           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);\r
+           System.arraycopy(buffer, 0, newbuffer,\r
+                                             bufsize - tokenBegin, bufpos);\r
+           buffer = newbuffer;\r
+\r
+           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);\r
+           System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);\r
+           bufline = newbufline;\r
+\r
+           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);\r
+           System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);\r
+           bufcolumn = newbufcolumn;\r
+\r
+                       // The next three lines were added to support ability to get input\r
+                       // between two tokens.\r
+                  System.arraycopy(charOffset, tokenBegin, newcharOffset, 0, bufsize - tokenBegin);\r
+                  System.arraycopy(charOffset, 0, newcharOffset, bufsize - tokenBegin, bufpos);\r
+                  charOffset = newcharOffset;\r
+\r
+           bufpos += (bufsize - tokenBegin);\r
+        }\r
+        else\r
+        {\r
+           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);\r
+           buffer = newbuffer;\r
+\r
+           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);\r
+           bufline = newbufline;\r
+\r
+           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);\r
+           bufcolumn = newbufcolumn;\r
+\r
+                       // The next two lines were added to support ability to get input\r
+                       // between two tokens.\r
+                  System.arraycopy(charOffset, tokenBegin, newcharOffset, 0, bufsize - tokenBegin);\r
+                  charOffset = newcharOffset;\r
+\r
+           bufpos -= tokenBegin;\r
+        }\r
+     }\r
+     catch (Throwable t)\r
+     {\r
+        throw new Error(t.getMessage());\r
+     }\r
+\r
+     available = (bufsize += 2048);\r
+     tokenBegin = 0;\r
+  }\r
+\r
+  private final void FillBuff() throws java.io.IOException\r
+  {\r
+     if (maxNextCharInd == nextCharBuf.length)\r
+        maxNextCharInd = nextCharInd = 0;\r
+\r
+     int i;\r
+     try {\r
+        if ((i = inputStream.read(nextCharBuf, maxNextCharInd,\r
+                                  nextCharBuf.length - maxNextCharInd)) == -1)\r
+        {\r
+           inputStream.close();\r
+           throw new java.io.IOException();\r
+        }\r
+        else\r
+           maxNextCharInd += i;\r
+        return;\r
+     }\r
+     catch(java.io.IOException e) {\r
+        if (bufpos != 0)\r
+        {\r
+           --bufpos;\r
+           backup(0);\r
+        }\r
+        else\r
+        {\r
+           bufline[bufpos] = line;\r
+           bufcolumn[bufpos] = column;\r
+        }\r
+        if (tokenBegin == -1)\r
+           tokenBegin = bufpos;\r
+        throw e;\r
+     }\r
+  }\r
+\r
+  private final char ReadChar() throws java.io.IOException\r
+  {\r
+     if (++nextCharInd >= maxNextCharInd)\r
+        FillBuff();\r
+\r
+        return nextCharBuf[nextCharInd];\r
+  }\r
+     \r
+  public char BeginToken() throws java.io.IOException\r
+  {     \r
+        if (inBuf > 0)\r
+        {\r
+               --inBuf;\r
+               return buffer[tokenBegin = (bufpos == bufsize - 1) ? (bufpos = 0)\r
+                                                                                                                       : ++bufpos];\r
+        }\r
+\r
+     tokenBegin = 0;\r
+        bufpos = -1;\r
+     char c = readChar();\r
+\r
+     return c;\r
+  }     \r
+\r
+  private final void UpdateLineColumn(char c)\r
+  {\r
+     column++;\r
+\r
+     if (prevCharIsLF)\r
+     {\r
+        prevCharIsLF = false;\r
+        line += (column = 1);\r
+     }\r
+     else if (prevCharIsCR)\r
+     {\r
+        prevCharIsCR = false;\r
+        if (c == '\n')\r
+        {\r
+           prevCharIsLF = true;\r
+        }\r
+        else\r
+           line += (column = 1);\r
+     }\r
+\r
+     switch (c)\r
+     {\r
+        case '\r' :\r
+           prevCharIsCR = true;\r
+           break;\r
+        case '\n' :\r
+           prevCharIsLF = true;\r
+           break;\r
+        case '\t' :\r
+           column--;\r
+           column += (8 - (column & 07));\r
+           break;\r
+        default :\r
+           break;\r
+     }\r
+\r
+        bufline[bufpos] = line;\r
+        bufcolumn[bufpos] = column;\r
+  }\r
+\r
+  private int inBuf = 0;\r
+  public final char readChar() throws java.io.IOException\r
+  {\r
+     if (inBuf > 0)\r
+     {\r
+        --inBuf;\r
+        return (char)buffer[(bufpos == bufsize - 1) ? (bufpos = 0) : ++bufpos];\r
+     }\r
+\r
+     if (++bufpos == available)\r
+     {\r
+        if (available == bufsize)\r
+        {\r
+           if (tokenBegin > 2048)\r
+           {\r
+              bufpos = 0;\r
+              available = tokenBegin;\r
+           }\r
+           else if (tokenBegin < 0)\r
+              bufpos = 0;\r
+           else\r
+              ExpandBuff(false);\r
+        }\r
+        else if (available > tokenBegin)\r
+           available = bufsize;\r
+        else if ((tokenBegin - available) < 2048)\r
+           ExpandBuff(true);\r
+        else\r
+           available = tokenBegin;\r
+     }\r
+\r
+        char c = ReadChar();\r
+\r
+     UpdateLineColumn(c);\r
+\r
+       // The next line was added to support ability to get the input\r
+       // between two tokens.\r
+       charOffset[bufpos] = charCnt++;\r
+\r
+     return (buffer[bufpos] = c);\r
+  }\r
+\r
+  /**\r
+   * @deprecated \r
+   * @see #getEndColumn\r
+   */\r
+\r
+  public final int getColumn() {\r
+     return bufcolumn[bufpos];\r
+  }\r
+\r
+  /**\r
+   * @deprecated \r
+   * @see #getEndLine\r
+   */\r
+\r
+  public final int getLine() {\r
+     return bufline[bufpos];\r
+  }\r
+\r
+  public final int getEndColumn() {\r
+     return bufcolumn[bufpos];\r
+  }\r
+\r
+  public final int getEndLine() {\r
+     return bufline[bufpos];\r
+  }\r
+\r
+  public final int getBeginColumn() {\r
+     return bufcolumn[tokenBegin];\r
+  }\r
+\r
+  public final int getBeginLine() {\r
+     return bufline[tokenBegin];\r
+  }\r
+\r
+  // This method was added to support ability to get the input\r
+  // between two tokens.\r
+  public final int getBeginOffset() {\r
+       return charOffset[tokenBegin];\r
+  }\r
+\r
+  // This method was added to support ability to get the input\r
+  // between two tokens.\r
+  public final int getEndOffset() {\r
+       return charOffset[bufpos];\r
+  }\r
+\r
+  public final void backup(int amount) {\r
+\r
+    inBuf += amount;\r
+    if ((bufpos -= amount) < 0)\r
+       bufpos += bufsize;\r
+  }\r
+\r
+  public UCode_CharStream(java.io.Reader dstream,\r
+                 int startline, int startcolumn, int buffersize)\r
+  {\r
+    inputStream = dstream;\r
+    line = startline;\r
+    column = startcolumn - 1;\r
+\r
+    available = bufsize = buffersize;\r
+    buffer = new char[buffersize];\r
+    nextCharBuf = new char[buffersize];\r
+    bufline = new int[buffersize];\r
+    bufcolumn = new int[buffersize];\r
+\r
+       // The next line was added to support ability to get the input\r
+       // between two tokens.\r
+       charOffset = new int[buffersize];\r
+  }\r
+\r
+  public UCode_CharStream(java.io.Reader dstream,\r
+                                        int startline, int startcolumn)\r
+  {\r
+     this(dstream, startline, startcolumn, 4096);\r
+  }\r
+\r
+  public void ReInit(java.io.Reader dstream,\r
+                 int startline, int startcolumn, int buffersize)\r
+  {\r
+    inputStream = dstream;\r
+    line = startline;\r
+    column = startcolumn - 1;\r
+\r
+    if (buffer == null || buffersize != buffer.length)\r
+    {\r
+      available = bufsize = buffersize;\r
+      buffer = new char[buffersize];\r
+      nextCharBuf = new char[buffersize];\r
+      bufline = new int[buffersize];\r
+      bufcolumn = new int[buffersize];\r
+    }\r
+\r
+       // The next line was added to support ability to get the input\r
+       // between two tokens.\r
+       inBuf = maxNextCharInd = charCnt = tokenBegin = 0;\r
+       nextCharInd = bufpos = -1;\r
+  }\r
+\r
+  public void ReInit(java.io.Reader dstream,\r
+                                        int startline, int startcolumn)\r
+  {\r
+     ReInit(dstream, startline, startcolumn, 4096);\r
+  }\r
+  public UCode_CharStream(java.io.InputStream dstream, int startline,\r
+  int startcolumn, int buffersize)\r
+  {\r
+     this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);\r
+  }\r
+\r
+  public UCode_CharStream(java.io.InputStream dstream, int startline,\r
+                                                           int startcolumn)\r
+  {\r
+     this(dstream, startline, startcolumn, 4096);\r
+  }\r
+\r
+  public void ReInit(java.io.InputStream dstream, int startline,\r
+  int startcolumn, int buffersize)\r
+  {\r
+     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);\r
+  }\r
+  public void ReInit(java.io.InputStream dstream, int startline,\r
+                                                           int startcolumn)\r
+  {\r
+     ReInit(dstream, startline, startcolumn, 4096);\r
+  }\r
+\r
+  public final String GetImage()\r
+  {\r
+     if (bufpos >= tokenBegin)\r
+        return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);\r
+     else\r
+        return new String(buffer, tokenBegin, bufsize - tokenBegin) +\r
+                              new String(buffer, 0, bufpos + 1);\r
+  }\r
+\r
+  public final char[] GetSuffix(int len)\r
+  {\r
+     char[] ret = new char[len];\r
+\r
+     if ((bufpos + 1) >= len)\r
+        System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);\r
+     else\r
+     {\r
+        System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,\r
+                                                          len - bufpos - 1);\r
+        System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);\r
+     }\r
+\r
+     return ret;\r
+  }\r
+\r
+  public void Done()\r
+  {\r
+     nextCharBuf = null;\r
+     buffer = null;\r
+     bufline = null;\r
+     bufcolumn = null;\r
+\r
+       // The next line was added to support ability to get the input\r
+       // between two tokens.\r
+        charOffset = null;\r
+  }\r
+\r
+  /**\r
+   * Method to adjust line and column numbers for the start of a token.<BR>\r
+   */\r
+  public void adjustBeginLineColumn(int newLine, int newCol)\r
+  {\r
+     int start = tokenBegin;\r
+     int len;\r
+\r
+     if (bufpos >= tokenBegin)\r
+     {\r
+        len = bufpos - tokenBegin + inBuf + 1;\r
+     }\r
+     else\r
+     {\r
+        len = bufsize - tokenBegin + bufpos + 1 + inBuf;\r
+     }\r
+\r
+     int i = 0, j = 0, k = 0;\r
+     int nextColDiff = 0, columnDiff = 0;\r
+\r
+     while (i < len &&\r
+            bufline[j = start % bufsize] == bufline[k = ++start % bufsize])\r
+     {\r
+        bufline[j] = newLine;\r
+        nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];\r
+        bufcolumn[j] = newCol + columnDiff;\r
+        columnDiff = nextColDiff;\r
+        i++;\r
+     } \r
+\r
+     if (i < len)\r
+     {\r
+        bufline[j] = newLine++;\r
+        bufcolumn[j] = newCol + columnDiff;\r
+\r
+        while (i++ < len)\r
+        {\r
+           if (bufline[j = start % bufsize] != bufline[++start % bufsize])\r
+              bufline[j] = newLine++;\r
+           else\r
+              bufline[j] = newLine;\r
+        }\r
+     }\r
+\r
+     line = bufline[j];\r
+     column = bufcolumn[j];\r
+  }\r
+\r
+}\r