src/java.management.rest/share/classes/com/oracle/jmx/remote/rest/json/parser/JavaCharStream.java
branchjmx-rest-api
changeset 56026 bd531f08d7c7
parent 56007 d6cbabcaf518
child 56027 81372436b79e
equal deleted inserted replaced
56007:d6cbabcaf518 56026:bd531f08d7c7
     1 /* Generated By:JavaCC: Do not edit this line. JavaCharStream.java Version 5.0 */
       
     2 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
       
     3 package com.oracle.jmx.remote.rest.json.parser;
       
     4 
       
     5 /**
       
     6  * An implementation of interface CharStream, where the stream is assumed to
       
     7  * contain only ASCII characters (with java-like unicode escape processing).
       
     8  */
       
     9 
       
    10 public
       
    11 class JavaCharStream
       
    12 {
       
    13   /** Whether parser is static. */
       
    14   public static final boolean staticFlag = false;
       
    15 
       
    16   static final int hexval(char c) throws java.io.IOException {
       
    17     switch(c)
       
    18     {
       
    19        case '0' :
       
    20           return 0;
       
    21        case '1' :
       
    22           return 1;
       
    23        case '2' :
       
    24           return 2;
       
    25        case '3' :
       
    26           return 3;
       
    27        case '4' :
       
    28           return 4;
       
    29        case '5' :
       
    30           return 5;
       
    31        case '6' :
       
    32           return 6;
       
    33        case '7' :
       
    34           return 7;
       
    35        case '8' :
       
    36           return 8;
       
    37        case '9' :
       
    38           return 9;
       
    39 
       
    40        case 'a' :
       
    41        case 'A' :
       
    42           return 10;
       
    43        case 'b' :
       
    44        case 'B' :
       
    45           return 11;
       
    46        case 'c' :
       
    47        case 'C' :
       
    48           return 12;
       
    49        case 'd' :
       
    50        case 'D' :
       
    51           return 13;
       
    52        case 'e' :
       
    53        case 'E' :
       
    54           return 14;
       
    55        case 'f' :
       
    56        case 'F' :
       
    57           return 15;
       
    58     }
       
    59 
       
    60     throw new java.io.IOException(); // Should never come here
       
    61   }
       
    62 
       
    63 /** Position in buffer. */
       
    64   public int bufpos = -1;
       
    65   int bufsize;
       
    66   int available;
       
    67   int tokenBegin;
       
    68   protected int bufline[];
       
    69   protected int bufcolumn[];
       
    70 
       
    71   protected int column = 0;
       
    72   protected int line = 1;
       
    73 
       
    74   protected boolean prevCharIsCR = false;
       
    75   protected boolean prevCharIsLF = false;
       
    76 
       
    77   protected java.io.Reader inputStream;
       
    78 
       
    79   protected char[] nextCharBuf;
       
    80   protected char[] buffer;
       
    81   protected int maxNextCharInd = 0;
       
    82   protected int nextCharInd = -1;
       
    83   protected int inBuf = 0;
       
    84   protected int tabSize = 8;
       
    85 
       
    86   protected void setTabSize(int i) { tabSize = i; }
       
    87   protected int getTabSize(int i) { return tabSize; }
       
    88 
       
    89   protected void ExpandBuff(boolean wrapAround)
       
    90   {
       
    91     char[] newbuffer = new char[bufsize + 2048];
       
    92     int newbufline[] = new int[bufsize + 2048];
       
    93     int newbufcolumn[] = new int[bufsize + 2048];
       
    94 
       
    95     try
       
    96     {
       
    97       if (wrapAround)
       
    98       {
       
    99         System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
       
   100         System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);
       
   101         buffer = newbuffer;
       
   102 
       
   103         System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
       
   104         System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
       
   105         bufline = newbufline;
       
   106 
       
   107         System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
       
   108         System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
       
   109         bufcolumn = newbufcolumn;
       
   110 
       
   111         bufpos += (bufsize - tokenBegin);
       
   112     }
       
   113     else
       
   114     {
       
   115         System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
       
   116         buffer = newbuffer;
       
   117 
       
   118         System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
       
   119         bufline = newbufline;
       
   120 
       
   121         System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
       
   122         bufcolumn = newbufcolumn;
       
   123 
       
   124         bufpos -= tokenBegin;
       
   125       }
       
   126     }
       
   127     catch (Throwable t)
       
   128     {
       
   129       throw new Error(t.getMessage());
       
   130     }
       
   131 
       
   132     available = (bufsize += 2048);
       
   133     tokenBegin = 0;
       
   134   }
       
   135 
       
   136   protected void FillBuff() throws java.io.IOException
       
   137   {
       
   138     int i;
       
   139     if (maxNextCharInd == 4096)
       
   140       maxNextCharInd = nextCharInd = 0;
       
   141 
       
   142     try {
       
   143       if ((i = inputStream.read(nextCharBuf, maxNextCharInd,
       
   144                                           4096 - maxNextCharInd)) == -1)
       
   145       {
       
   146         inputStream.close();
       
   147         throw new java.io.IOException();
       
   148       }
       
   149       else
       
   150          maxNextCharInd += i;
       
   151       return;
       
   152     }
       
   153     catch(java.io.IOException e) {
       
   154       if (bufpos != 0)
       
   155       {
       
   156         --bufpos;
       
   157         backup(0);
       
   158       }
       
   159       else
       
   160       {
       
   161         bufline[bufpos] = line;
       
   162         bufcolumn[bufpos] = column;
       
   163       }
       
   164       throw e;
       
   165     }
       
   166   }
       
   167 
       
   168   protected char ReadByte() throws java.io.IOException
       
   169   {
       
   170     if (++nextCharInd >= maxNextCharInd)
       
   171       FillBuff();
       
   172 
       
   173     return nextCharBuf[nextCharInd];
       
   174   }
       
   175 
       
   176 /** @return starting character for token. */
       
   177   public char BeginToken() throws java.io.IOException
       
   178   {
       
   179     if (inBuf > 0)
       
   180     {
       
   181       --inBuf;
       
   182 
       
   183       if (++bufpos == bufsize)
       
   184         bufpos = 0;
       
   185 
       
   186       tokenBegin = bufpos;
       
   187       return buffer[bufpos];
       
   188     }
       
   189 
       
   190     tokenBegin = 0;
       
   191     bufpos = -1;
       
   192 
       
   193     return readChar();
       
   194   }
       
   195 
       
   196   protected void AdjustBuffSize()
       
   197   {
       
   198     if (available == bufsize)
       
   199     {
       
   200       if (tokenBegin > 2048)
       
   201       {
       
   202         bufpos = 0;
       
   203         available = tokenBegin;
       
   204       }
       
   205       else
       
   206         ExpandBuff(false);
       
   207     }
       
   208     else if (available > tokenBegin)
       
   209       available = bufsize;
       
   210     else if ((tokenBegin - available) < 2048)
       
   211       ExpandBuff(true);
       
   212     else
       
   213       available = tokenBegin;
       
   214   }
       
   215 
       
   216   protected void UpdateLineColumn(char c)
       
   217   {
       
   218     column++;
       
   219 
       
   220     if (prevCharIsLF)
       
   221     {
       
   222       prevCharIsLF = false;
       
   223       line += (column = 1);
       
   224     }
       
   225     else if (prevCharIsCR)
       
   226     {
       
   227       prevCharIsCR = false;
       
   228       if (c == '\n')
       
   229       {
       
   230         prevCharIsLF = true;
       
   231       }
       
   232       else
       
   233         line += (column = 1);
       
   234     }
       
   235 
       
   236     switch (c)
       
   237     {
       
   238       case '\r' :
       
   239         prevCharIsCR = true;
       
   240         break;
       
   241       case '\n' :
       
   242         prevCharIsLF = true;
       
   243         break;
       
   244       case '\t' :
       
   245         column--;
       
   246         column += (tabSize - (column % tabSize));
       
   247         break;
       
   248       default :
       
   249         break;
       
   250     }
       
   251 
       
   252     bufline[bufpos] = line;
       
   253     bufcolumn[bufpos] = column;
       
   254   }
       
   255 
       
   256 /** Read a character. */
       
   257   public char readChar() throws java.io.IOException
       
   258   {
       
   259     if (inBuf > 0)
       
   260     {
       
   261       --inBuf;
       
   262 
       
   263       if (++bufpos == bufsize)
       
   264         bufpos = 0;
       
   265 
       
   266       return buffer[bufpos];
       
   267     }
       
   268 
       
   269     char c;
       
   270 
       
   271     if (++bufpos == available)
       
   272       AdjustBuffSize();
       
   273 
       
   274     if ((buffer[bufpos] = c = ReadByte()) == '\\')
       
   275     {
       
   276       UpdateLineColumn(c);
       
   277 
       
   278       int backSlashCnt = 1;
       
   279 
       
   280       for (;;) // Read all the backslashes
       
   281       {
       
   282         if (++bufpos == available)
       
   283           AdjustBuffSize();
       
   284 
       
   285         try
       
   286         {
       
   287           if ((buffer[bufpos] = c = ReadByte()) != '\\')
       
   288           {
       
   289             UpdateLineColumn(c);
       
   290             // found a non-backslash char.
       
   291             if ((c == 'u') && ((backSlashCnt & 1) == 1))
       
   292             {
       
   293               if (--bufpos < 0)
       
   294                 bufpos = bufsize - 1;
       
   295 
       
   296               break;
       
   297             }
       
   298 
       
   299             backup(backSlashCnt);
       
   300             return '\\';
       
   301           }
       
   302         }
       
   303         catch(java.io.IOException e)
       
   304         {
       
   305 	  // We are returning one backslash so we should only backup (count-1)
       
   306           if (backSlashCnt > 1)
       
   307             backup(backSlashCnt-1);
       
   308 
       
   309           return '\\';
       
   310         }
       
   311 
       
   312         UpdateLineColumn(c);
       
   313         backSlashCnt++;
       
   314       }
       
   315 
       
   316       // Here, we have seen an odd number of backslash's followed by a 'u'
       
   317       try
       
   318       {
       
   319         while ((c = ReadByte()) == 'u')
       
   320           ++column;
       
   321 
       
   322         buffer[bufpos] = c = (char)(hexval(c) << 12 |
       
   323                                     hexval(ReadByte()) << 8 |
       
   324                                     hexval(ReadByte()) << 4 |
       
   325                                     hexval(ReadByte()));
       
   326 
       
   327         column += 4;
       
   328       }
       
   329       catch(java.io.IOException e)
       
   330       {
       
   331         throw new Error("Invalid escape character at line " + line +
       
   332                                          " column " + column + ".");
       
   333       }
       
   334 
       
   335       if (backSlashCnt == 1)
       
   336         return c;
       
   337       else
       
   338       {
       
   339         backup(backSlashCnt - 1);
       
   340         return '\\';
       
   341       }
       
   342     }
       
   343     else
       
   344     {
       
   345       UpdateLineColumn(c);
       
   346       return c;
       
   347     }
       
   348   }
       
   349 
       
   350   @Deprecated
       
   351   /**
       
   352    * @deprecated
       
   353    * @see #getEndColumn
       
   354    */
       
   355   public int getColumn() {
       
   356     return bufcolumn[bufpos];
       
   357   }
       
   358 
       
   359   @Deprecated
       
   360   /**
       
   361    * @deprecated
       
   362    * @see #getEndLine
       
   363    */
       
   364   public int getLine() {
       
   365     return bufline[bufpos];
       
   366   }
       
   367 
       
   368 /** Get end column. */
       
   369   public int getEndColumn() {
       
   370     return bufcolumn[bufpos];
       
   371   }
       
   372 
       
   373 /** Get end line. */
       
   374   public int getEndLine() {
       
   375     return bufline[bufpos];
       
   376   }
       
   377 
       
   378 /** @return column of token start */
       
   379   public int getBeginColumn() {
       
   380     return bufcolumn[tokenBegin];
       
   381   }
       
   382 
       
   383 /** @return line number of token start */
       
   384   public int getBeginLine() {
       
   385     return bufline[tokenBegin];
       
   386   }
       
   387 
       
   388 /** Retreat. */
       
   389   public void backup(int amount) {
       
   390 
       
   391     inBuf += amount;
       
   392     if ((bufpos -= amount) < 0)
       
   393       bufpos += bufsize;
       
   394   }
       
   395 
       
   396 /** Constructor. */
       
   397   public JavaCharStream(java.io.Reader dstream,
       
   398                  int startline, int startcolumn, int buffersize)
       
   399   {
       
   400     inputStream = dstream;
       
   401     line = startline;
       
   402     column = startcolumn - 1;
       
   403 
       
   404     available = bufsize = buffersize;
       
   405     buffer = new char[buffersize];
       
   406     bufline = new int[buffersize];
       
   407     bufcolumn = new int[buffersize];
       
   408     nextCharBuf = new char[4096];
       
   409   }
       
   410 
       
   411 /** Constructor. */
       
   412   public JavaCharStream(java.io.Reader dstream,
       
   413                                         int startline, int startcolumn)
       
   414   {
       
   415     this(dstream, startline, startcolumn, 4096);
       
   416   }
       
   417 
       
   418 /** Constructor. */
       
   419   public JavaCharStream(java.io.Reader dstream)
       
   420   {
       
   421     this(dstream, 1, 1, 4096);
       
   422   }
       
   423 /** Reinitialise. */
       
   424   public void ReInit(java.io.Reader dstream,
       
   425                  int startline, int startcolumn, int buffersize)
       
   426   {
       
   427     inputStream = dstream;
       
   428     line = startline;
       
   429     column = startcolumn - 1;
       
   430 
       
   431     if (buffer == null || buffersize != buffer.length)
       
   432     {
       
   433       available = bufsize = buffersize;
       
   434       buffer = new char[buffersize];
       
   435       bufline = new int[buffersize];
       
   436       bufcolumn = new int[buffersize];
       
   437       nextCharBuf = new char[4096];
       
   438     }
       
   439     prevCharIsLF = prevCharIsCR = false;
       
   440     tokenBegin = inBuf = maxNextCharInd = 0;
       
   441     nextCharInd = bufpos = -1;
       
   442   }
       
   443 
       
   444 /** Reinitialise. */
       
   445   public void ReInit(java.io.Reader dstream,
       
   446                                         int startline, int startcolumn)
       
   447   {
       
   448     ReInit(dstream, startline, startcolumn, 4096);
       
   449   }
       
   450 
       
   451 /** Reinitialise. */
       
   452   public void ReInit(java.io.Reader dstream)
       
   453   {
       
   454     ReInit(dstream, 1, 1, 4096);
       
   455   }
       
   456 /** Constructor. */
       
   457   public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
       
   458   int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
       
   459   {
       
   460     this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
       
   461   }
       
   462 
       
   463 /** Constructor. */
       
   464   public JavaCharStream(java.io.InputStream dstream, int startline,
       
   465   int startcolumn, int buffersize)
       
   466   {
       
   467     this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
       
   468   }
       
   469 
       
   470 /** Constructor. */
       
   471   public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
       
   472                         int startcolumn) throws java.io.UnsupportedEncodingException
       
   473   {
       
   474     this(dstream, encoding, startline, startcolumn, 4096);
       
   475   }
       
   476 
       
   477 /** Constructor. */
       
   478   public JavaCharStream(java.io.InputStream dstream, int startline,
       
   479                         int startcolumn)
       
   480   {
       
   481     this(dstream, startline, startcolumn, 4096);
       
   482   }
       
   483 
       
   484 /** Constructor. */
       
   485   public JavaCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
       
   486   {
       
   487     this(dstream, encoding, 1, 1, 4096);
       
   488   }
       
   489 
       
   490 /** Constructor. */
       
   491   public JavaCharStream(java.io.InputStream dstream)
       
   492   {
       
   493     this(dstream, 1, 1, 4096);
       
   494   }
       
   495 
       
   496 /** Reinitialise. */
       
   497   public void ReInit(java.io.InputStream dstream, String encoding, int startline,
       
   498   int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
       
   499   {
       
   500     ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
       
   501   }
       
   502 
       
   503 /** Reinitialise. */
       
   504   public void ReInit(java.io.InputStream dstream, int startline,
       
   505   int startcolumn, int buffersize)
       
   506   {
       
   507     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
       
   508   }
       
   509 /** Reinitialise. */
       
   510   public void ReInit(java.io.InputStream dstream, String encoding, int startline,
       
   511                      int startcolumn) throws java.io.UnsupportedEncodingException
       
   512   {
       
   513     ReInit(dstream, encoding, startline, startcolumn, 4096);
       
   514   }
       
   515 /** Reinitialise. */
       
   516   public void ReInit(java.io.InputStream dstream, int startline,
       
   517                      int startcolumn)
       
   518   {
       
   519     ReInit(dstream, startline, startcolumn, 4096);
       
   520   }
       
   521 /** Reinitialise. */
       
   522   public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
       
   523   {
       
   524     ReInit(dstream, encoding, 1, 1, 4096);
       
   525   }
       
   526 
       
   527 /** Reinitialise. */
       
   528   public void ReInit(java.io.InputStream dstream)
       
   529   {
       
   530     ReInit(dstream, 1, 1, 4096);
       
   531   }
       
   532 
       
   533   /** @return token image as String */
       
   534   public String GetImage()
       
   535   {
       
   536     if (bufpos >= tokenBegin)
       
   537       return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
       
   538     else
       
   539       return new String(buffer, tokenBegin, bufsize - tokenBegin) +
       
   540                               new String(buffer, 0, bufpos + 1);
       
   541   }
       
   542 
       
   543   /** @return suffix */
       
   544   public char[] GetSuffix(int len)
       
   545   {
       
   546     char[] ret = new char[len];
       
   547 
       
   548     if ((bufpos + 1) >= len)
       
   549       System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
       
   550     else
       
   551     {
       
   552       System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
       
   553                                                         len - bufpos - 1);
       
   554       System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
       
   555     }
       
   556 
       
   557     return ret;
       
   558   }
       
   559 
       
   560   /** Set buffers back to null when finished. */
       
   561   public void Done()
       
   562   {
       
   563     nextCharBuf = null;
       
   564     buffer = null;
       
   565     bufline = null;
       
   566     bufcolumn = null;
       
   567   }
       
   568 
       
   569   /**
       
   570    * Method to adjust line and column numbers for the start of a token.
       
   571    */
       
   572   public void adjustBeginLineColumn(int newLine, int newCol)
       
   573   {
       
   574     int start = tokenBegin;
       
   575     int len;
       
   576 
       
   577     if (bufpos >= tokenBegin)
       
   578     {
       
   579       len = bufpos - tokenBegin + inBuf + 1;
       
   580     }
       
   581     else
       
   582     {
       
   583       len = bufsize - tokenBegin + bufpos + 1 + inBuf;
       
   584     }
       
   585 
       
   586     int i = 0, j = 0, k = 0;
       
   587     int nextColDiff = 0, columnDiff = 0;
       
   588 
       
   589     while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
       
   590     {
       
   591       bufline[j] = newLine;
       
   592       nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
       
   593       bufcolumn[j] = newCol + columnDiff;
       
   594       columnDiff = nextColDiff;
       
   595       i++;
       
   596     }
       
   597 
       
   598     if (i < len)
       
   599     {
       
   600       bufline[j] = newLine++;
       
   601       bufcolumn[j] = newCol + columnDiff;
       
   602 
       
   603       while (i++ < len)
       
   604       {
       
   605         if (bufline[j = start % bufsize] != bufline[++start % bufsize])
       
   606           bufline[j] = newLine++;
       
   607         else
       
   608           bufline[j] = newLine;
       
   609       }
       
   610     }
       
   611 
       
   612     line = bufline[j];
       
   613     column = bufcolumn[j];
       
   614   }
       
   615 
       
   616 }
       
   617 /* JavaCC - OriginalChecksum=3b79d8fd3ca02005c805e406bf89cd35 (do not edit this line) */