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