001/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 4.0 */
002/**
003 * Licensed to the Apache Software Foundation (ASF) under one
004 * or more contributor license agreements.  See the NOTICE file
005 * distributed with this work for additional information
006 * regarding copyright ownership.  The ASF licenses this file
007 * to you under the Apache License, Version 2.0 (the
008 * "License"); you may not use this file except in compliance
009 * with the License.  You may obtain a copy of the License at
010 *
011 *     http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019
020package org.apache.hadoop.record.compiler.generated;
021
022import org.apache.hadoop.classification.InterfaceAudience;
023import org.apache.hadoop.classification.InterfaceStability;
024
025/**
026 * An implementation of interface CharStream, where the stream is assumed to
027 * contain only ASCII characters (without unicode processing).
028 * 
029 * @deprecated Replaced by <a href="https://hadoop.apache.org/avro/">Avro</a>.
030 */
031@Deprecated
032@InterfaceAudience.Public
033@InterfaceStability.Stable
034public class SimpleCharStream
035{
036  public static final boolean staticFlag = false;
037  int bufsize;
038  int available;
039  int tokenBegin;
040  public int bufpos = -1;
041  protected int bufline[];
042  protected int bufcolumn[];
043
044  protected int column = 0;
045  protected int line = 1;
046
047  protected boolean prevCharIsCR = false;
048  protected boolean prevCharIsLF = false;
049
050  protected java.io.Reader inputStream;
051
052  protected char[] buffer;
053  protected int maxNextCharInd = 0;
054  protected int inBuf = 0;
055  protected int tabSize = 8;
056
057  protected void setTabSize(int i) { tabSize = i; }
058  protected int getTabSize(int i) { return tabSize; }
059
060
061  protected void ExpandBuff(boolean wrapAround)
062  {
063    char[] newbuffer = new char[bufsize + 2048];
064    int newbufline[] = new int[bufsize + 2048];
065    int newbufcolumn[] = new int[bufsize + 2048];
066
067    try
068      {
069        if (wrapAround)
070          {
071            System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
072            System.arraycopy(buffer, 0, newbuffer,
073                             bufsize - tokenBegin, bufpos);
074            buffer = newbuffer;
075
076            System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
077            System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
078            bufline = newbufline;
079
080            System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
081            System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
082            bufcolumn = newbufcolumn;
083
084            maxNextCharInd = (bufpos += (bufsize - tokenBegin));
085          }
086        else
087          {
088            System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
089            buffer = newbuffer;
090
091            System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
092            bufline = newbufline;
093
094            System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
095            bufcolumn = newbufcolumn;
096
097            maxNextCharInd = (bufpos -= tokenBegin);
098          }
099      }
100    catch (Throwable t)
101      {
102        throw new Error(t.getMessage());
103      }
104
105
106    bufsize += 2048;
107    available = bufsize;
108    tokenBegin = 0;
109  }
110
111  protected void FillBuff() throws java.io.IOException
112  {
113    if (maxNextCharInd == available)
114      {
115        if (available == bufsize)
116          {
117            if (tokenBegin > 2048)
118              {
119                bufpos = maxNextCharInd = 0;
120                available = tokenBegin;
121              }
122            else if (tokenBegin < 0)
123              bufpos = maxNextCharInd = 0;
124            else
125              ExpandBuff(false);
126          }
127        else if (available > tokenBegin)
128          available = bufsize;
129        else if ((tokenBegin - available) < 2048)
130          ExpandBuff(true);
131        else
132          available = tokenBegin;
133      }
134
135    int i;
136    try {
137      if ((i = inputStream.read(buffer, maxNextCharInd,
138                                available - maxNextCharInd)) == -1)
139        {
140          inputStream.close();
141          throw new java.io.IOException();
142        }
143      else
144        maxNextCharInd += i;
145      return;
146    }
147    catch(java.io.IOException e) {
148      --bufpos;
149      backup(0);
150      if (tokenBegin == -1)
151        tokenBegin = bufpos;
152      throw e;
153    }
154  }
155
156  public char BeginToken() throws java.io.IOException
157  {
158    tokenBegin = -1;
159    char c = readChar();
160    tokenBegin = bufpos;
161
162    return c;
163  }
164
165  protected void UpdateLineColumn(char c)
166  {
167    column++;
168
169    if (prevCharIsLF)
170      {
171        prevCharIsLF = false;
172        line += (column = 1);
173      }
174    else if (prevCharIsCR)
175      {
176        prevCharIsCR = false;
177        if (c == '\n')
178          {
179            prevCharIsLF = true;
180          }
181        else
182          line += (column = 1);
183      }
184
185    switch (c)
186      {
187      case '\r' :
188        prevCharIsCR = true;
189        break;
190      case '\n' :
191        prevCharIsLF = true;
192        break;
193      case '\t' :
194        column--;
195        column += (tabSize - (column % tabSize));
196        break;
197      default :
198        break;
199      }
200
201    bufline[bufpos] = line;
202    bufcolumn[bufpos] = column;
203  }
204
205  public char readChar() throws java.io.IOException
206  {
207    if (inBuf > 0)
208      {
209        --inBuf;
210
211        if (++bufpos == bufsize)
212          bufpos = 0;
213
214        return buffer[bufpos];
215      }
216
217    if (++bufpos >= maxNextCharInd)
218      FillBuff();
219
220    char c = buffer[bufpos];
221
222    UpdateLineColumn(c);
223    return (c);
224  }
225
226  public int getEndColumn() {
227    return bufcolumn[bufpos];
228  }
229
230  public int getEndLine() {
231    return bufline[bufpos];
232  }
233
234  public int getBeginColumn() {
235    return bufcolumn[tokenBegin];
236  }
237
238  public int getBeginLine() {
239    return bufline[tokenBegin];
240  }
241
242  public void backup(int amount) {
243
244    inBuf += amount;
245    if ((bufpos -= amount) < 0)
246      bufpos += bufsize;
247  }
248
249  public SimpleCharStream(java.io.Reader dstream, int startline,
250                          int startcolumn, int buffersize)
251  {
252    inputStream = dstream;
253    line = startline;
254    column = startcolumn - 1;
255
256    available = bufsize = buffersize;
257    buffer = new char[buffersize];
258    bufline = new int[buffersize];
259    bufcolumn = new int[buffersize];
260  }
261
262  public SimpleCharStream(java.io.Reader dstream, int startline,
263                          int startcolumn)
264  {
265    this(dstream, startline, startcolumn, 4096);
266  }
267
268  public SimpleCharStream(java.io.Reader dstream)
269  {
270    this(dstream, 1, 1, 4096);
271  }
272  public void ReInit(java.io.Reader dstream, int startline,
273                     int startcolumn, int buffersize)
274  {
275    inputStream = dstream;
276    line = startline;
277    column = startcolumn - 1;
278
279    if (buffer == null || buffersize != buffer.length)
280      {
281        available = bufsize = buffersize;
282        buffer = new char[buffersize];
283        bufline = new int[buffersize];
284        bufcolumn = new int[buffersize];
285      }
286    prevCharIsLF = prevCharIsCR = false;
287    tokenBegin = inBuf = maxNextCharInd = 0;
288    bufpos = -1;
289  }
290
291  public void ReInit(java.io.Reader dstream, int startline,
292                     int startcolumn)
293  {
294    ReInit(dstream, startline, startcolumn, 4096);
295  }
296
297  public void ReInit(java.io.Reader dstream)
298  {
299    ReInit(dstream, 1, 1, 4096);
300  }
301  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
302                          int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
303  {
304    this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
305  }
306
307  public SimpleCharStream(java.io.InputStream dstream, int startline,
308                          int startcolumn, int buffersize)
309  {
310    this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
311  }
312
313  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
314                          int startcolumn) throws java.io.UnsupportedEncodingException
315  {
316    this(dstream, encoding, startline, startcolumn, 4096);
317  }
318
319  public SimpleCharStream(java.io.InputStream dstream, int startline,
320                          int startcolumn)
321  {
322    this(dstream, startline, startcolumn, 4096);
323  }
324
325  public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
326  {
327    this(dstream, encoding, 1, 1, 4096);
328  }
329
330  public SimpleCharStream(java.io.InputStream dstream)
331  {
332    this(dstream, 1, 1, 4096);
333  }
334
335  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
336                     int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
337  {
338    ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
339  }
340
341  public void ReInit(java.io.InputStream dstream, int startline,
342                     int startcolumn, int buffersize)
343  {
344    ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
345  }
346
347  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
348  {
349    ReInit(dstream, encoding, 1, 1, 4096);
350  }
351
352  public void ReInit(java.io.InputStream dstream)
353  {
354    ReInit(dstream, 1, 1, 4096);
355  }
356  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
357                     int startcolumn) throws java.io.UnsupportedEncodingException
358  {
359    ReInit(dstream, encoding, startline, startcolumn, 4096);
360  }
361  public void ReInit(java.io.InputStream dstream, int startline,
362                     int startcolumn)
363  {
364    ReInit(dstream, startline, startcolumn, 4096);
365  }
366  public String GetImage()
367  {
368    if (bufpos >= tokenBegin)
369      return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
370    else
371      return new String(buffer, tokenBegin, bufsize - tokenBegin) +
372        new String(buffer, 0, bufpos + 1);
373  }
374
375  public char[] GetSuffix(int len)
376  {
377    char[] ret = new char[len];
378
379    if ((bufpos + 1) >= len)
380      System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
381    else
382      {
383        System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
384                         len - bufpos - 1);
385        System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
386      }
387
388    return ret;
389  }
390
391  public void Done()
392  {
393    buffer = null;
394    bufline = null;
395    bufcolumn = null;
396  }
397
398  /**
399   * Method to adjust line and column numbers for the start of a token.
400   */
401  public void adjustBeginLineColumn(int newLine, int newCol)
402  {
403    int start = tokenBegin;
404    int len;
405
406    if (bufpos >= tokenBegin)
407      {
408        len = bufpos - tokenBegin + inBuf + 1;
409      }
410    else
411      {
412        len = bufsize - tokenBegin + bufpos + 1 + inBuf;
413      }
414
415    int i = 0, j = 0, k = 0;
416    int nextColDiff = 0, columnDiff = 0;
417
418    while (i < len &&
419           bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
420      {
421        bufline[j] = newLine;
422        nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
423        bufcolumn[j] = newCol + columnDiff;
424        columnDiff = nextColDiff;
425        i++;
426      } 
427
428    if (i < len)
429      {
430        bufline[j] = newLine++;
431        bufcolumn[j] = newCol + columnDiff;
432
433        while (i++ < len)
434          {
435            if (bufline[j = start % bufsize] != bufline[++start % bufsize])
436              bufline[j] = newLine++;
437            else
438              bufline[j] = newLine;
439          }
440      }
441
442    line = bufline[j];
443    column = bufcolumn[j];
444  }
445
446}