• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * [The "BSD licence"]
3  * Copyright (c) 2005-2008 Terence Parr
4  * All rights reserved.
5  *
6  * Conversion to C#:
7  * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc.
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. The name of the author may not be used to endorse or promote products
19  *    derived from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 namespace Antlr.Runtime
34 {
35     using TextReader = System.IO.TextReader;
36 
37     /** <summary>
38      *  Vacuum all input from a Reader and then treat it like a StringStream.
39      *  Manage the buffer manually to avoid unnecessary data copying.
40      *  </summary>
41      *
42      *  <remarks>
43      *  If you need encoding, use ANTLRInputStream.
44      *  </remarks>
45      */
46     [System.Serializable]
47     public class ANTLRReaderStream : ANTLRStringStream
48     {
49         public const int ReadBufferSize = 1024;
50         public const int InitialBufferSize = 1024;
51 
ANTLRReaderStream( TextReader r )52         public ANTLRReaderStream( TextReader r )
53             : this( r, InitialBufferSize, ReadBufferSize )
54         {
55         }
56 
ANTLRReaderStream( TextReader r, int size )57         public ANTLRReaderStream( TextReader r, int size )
58             : this( r, size, ReadBufferSize )
59         {
60         }
61 
ANTLRReaderStream( TextReader r, int size, int readChunkSize )62         public ANTLRReaderStream( TextReader r, int size, int readChunkSize )
63         {
64             Load( r, size, readChunkSize );
65         }
66 
Load( TextReader r, int size, int readChunkSize )67         public virtual void Load( TextReader r, int size, int readChunkSize )
68         {
69             if ( r == null )
70             {
71                 return;
72             }
73             if ( size <= 0 )
74             {
75                 size = InitialBufferSize;
76             }
77             if ( readChunkSize <= 0 )
78             {
79                 readChunkSize = ReadBufferSize;
80             }
81             // System.out.println("load "+size+" in chunks of "+readChunkSize);
82             try
83             {
84                 data = r.ReadToEnd().ToCharArray();
85                 base.n = data.Length;
86             }
87             finally
88             {
89                 r.Close();
90             }
91         }
92     }
93 }
94