Free cookie consent management tool by TermsFeed Policy Generator

source: stable/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.CSharp-5.5.0/Parser/SeekableStreamReader.cs @ 15973

Last change on this file since 15973 was 11700, checked in by jkarder, 10 years ago

#2077: created branch and added first version

File size: 2.9 KB
Line 
1//
2// SeekableStreamReader.cs
3//
4// Author:
5//       Mike KrÃŒger <mkrueger@xamarin.com>
6//
7// Copyright (c) 2012 Xamarin Inc. (http://xamarin.com)
8//
9// Permission is hereby granted, free of charge, to any person obtaining a copy
10// of this software and associated documentation files (the "Software"), to deal
11// in the Software without restriction, including without limitation the rights
12// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13// copies of the Software, and to permit persons to whom the Software is
14// furnished to do so, subject to the following conditions:
15//
16// The above copyright notice and this permission notice shall be included in
17// all copies or substantial portions of the Software.
18//
19// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25// THE SOFTWARE.
26using System;
27using ICSharpCode.NRefactory.Editor;
28using System.IO;
29using System.Text;
30
31namespace Mono.CSharp
32{
33  public class SeekableStreamReader : IDisposable
34  {
35    public const int DefaultReadAheadSize = 2048;
36
37    readonly ITextSource textSource;
38
39    int pos;
40
41    static string GetAllText(Stream stream, Encoding encoding) {
42      using (var rdr = new StreamReader(stream, encoding)) {
43        return rdr.ReadToEnd();
44      }
45    }
46
47    public SeekableStreamReader (Stream stream, Encoding encoding, char[] sharedBuffer = null) : this(new StringTextSource(GetAllText(stream, encoding)))
48    {
49    }
50
51    public SeekableStreamReader (ITextSource source)
52    {
53      this.textSource = source;
54    }
55
56
57    public void Dispose ()
58    {
59    }
60   
61    /// <remarks>
62    ///   This value corresponds to the current position in a stream of characters.
63    ///   The StreamReader hides its manipulation of the underlying byte stream and all
64    ///   character set/decoding issues.  Thus, we cannot use this position to guess at
65    ///   the corresponding position in the underlying byte stream even though there is
66    ///   a correlation between them.
67    /// </remarks>
68    public int Position {
69      get {
70        return pos;
71      }
72     
73      set {
74        pos = value;
75      }
76    }
77
78    public char GetChar (int position)
79    {
80      return textSource.GetCharAt (position);
81    }
82   
83    public char[] ReadChars (int fromPosition, int toPosition)
84    {
85      return textSource.GetText (fromPosition, toPosition - fromPosition).ToCharArray ();
86    }
87   
88    public int Peek ()
89    {
90      if (pos >= textSource.TextLength)
91        return -1;
92      return textSource.GetCharAt (pos);
93    }
94   
95    public int Read ()
96    {
97      if (pos >= textSource.TextLength)
98        return -1;
99      return textSource.GetCharAt (pos++);
100    }
101  }
102}
103
Note: See TracBrowser for help on using the repository browser.