Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TextReader.cs
Go to the documentation of this file.
4using System.Text;
7
8namespace System.IO;
9
11{
12 private sealed class NullTextReader : TextReader
13 {
14 public override int Read(char[] buffer, int index, int count)
15 {
16 return 0;
17 }
18
19 public override string ReadLine()
20 {
21 return null;
22 }
23 }
24
25 internal sealed class SyncTextReader : TextReader
26 {
27 internal readonly TextReader _in;
28
30 {
31 _in = t;
32 }
33
34 [MethodImpl(MethodImplOptions.Synchronized)]
35 public override void Close()
36 {
37 _in.Close();
38 }
39
40 [MethodImpl(MethodImplOptions.Synchronized)]
41 protected override void Dispose(bool disposing)
42 {
43 if (disposing)
44 {
45 ((IDisposable)_in).Dispose();
46 }
47 }
48
49 [MethodImpl(MethodImplOptions.Synchronized)]
50 public override int Peek()
51 {
52 return _in.Peek();
53 }
54
55 [MethodImpl(MethodImplOptions.Synchronized)]
56 public override int Read()
57 {
58 return _in.Read();
59 }
60
61 [MethodImpl(MethodImplOptions.Synchronized)]
62 public override int Read(char[] buffer, int index, int count)
63 {
64 return _in.Read(buffer, index, count);
65 }
66
67 [MethodImpl(MethodImplOptions.Synchronized)]
68 public override int ReadBlock(char[] buffer, int index, int count)
69 {
70 return _in.ReadBlock(buffer, index, count);
71 }
72
73 [MethodImpl(MethodImplOptions.Synchronized)]
74 public override string ReadLine()
75 {
76 return _in.ReadLine();
77 }
78
79 [MethodImpl(MethodImplOptions.Synchronized)]
80 public override string ReadToEnd()
81 {
82 return _in.ReadToEnd();
83 }
84
85 [MethodImpl(MethodImplOptions.Synchronized)]
86 public override Task<string> ReadLineAsync()
87 {
88 return Task.FromResult(ReadLine());
89 }
90
91 [MethodImpl(MethodImplOptions.Synchronized)]
92 public override Task<string> ReadToEndAsync()
93 {
94 return Task.FromResult(ReadToEnd());
95 }
96
97 [MethodImpl(MethodImplOptions.Synchronized)]
98 public override Task<int> ReadBlockAsync(char[] buffer, int index, int count)
99 {
100 if (buffer == null)
101 {
102 throw new ArgumentNullException("buffer", SR.ArgumentNull_Buffer);
103 }
104 if (index < 0 || count < 0)
105 {
106 throw new ArgumentOutOfRangeException((index < 0) ? "index" : "count", SR.ArgumentOutOfRange_NeedNonNegNum);
107 }
108 if (buffer.Length - index < count)
109 {
111 }
112 return Task.FromResult(ReadBlock(buffer, index, count));
113 }
114
115 [MethodImpl(MethodImplOptions.Synchronized)]
116 public override Task<int> ReadAsync(char[] buffer, int index, int count)
117 {
118 if (buffer == null)
119 {
120 throw new ArgumentNullException("buffer", SR.ArgumentNull_Buffer);
121 }
122 if (index < 0 || count < 0)
123 {
124 throw new ArgumentOutOfRangeException((index < 0) ? "index" : "count", SR.ArgumentOutOfRange_NeedNonNegNum);
125 }
126 if (buffer.Length - index < count)
127 {
129 }
130 return Task.FromResult(Read(buffer, index, count));
131 }
132 }
133
134 public static readonly TextReader Null = new NullTextReader();
135
136 public virtual void Close()
137 {
138 Dispose(disposing: true);
139 GC.SuppressFinalize(this);
140 }
141
142 public void Dispose()
143 {
144 Dispose(disposing: true);
145 GC.SuppressFinalize(this);
146 }
147
148 protected virtual void Dispose(bool disposing)
149 {
150 }
151
152 public virtual int Peek()
153 {
154 return -1;
155 }
156
157 public virtual int Read()
158 {
159 return -1;
160 }
161
162 public virtual int Read(char[] buffer, int index, int count)
163 {
164 if (buffer == null)
165 {
166 throw new ArgumentNullException("buffer", SR.ArgumentNull_Buffer);
167 }
168 if (index < 0)
169 {
171 }
172 if (count < 0)
173 {
175 }
176 if (buffer.Length - index < count)
177 {
179 }
180 int i;
181 for (i = 0; i < count; i++)
182 {
183 int num = Read();
184 if (num == -1)
185 {
186 break;
187 }
188 buffer[index + i] = (char)num;
189 }
190 return i;
191 }
192
193 public virtual int Read(Span<char> buffer)
194 {
195 char[] array = ArrayPool<char>.Shared.Rent(buffer.Length);
196 try
197 {
198 int num = Read(array, 0, buffer.Length);
199 if ((uint)num > (uint)buffer.Length)
200 {
202 }
203 new Span<char>(array, 0, num).CopyTo(buffer);
204 return num;
205 }
206 finally
207 {
209 }
210 }
211
212 public virtual string ReadToEnd()
213 {
214 char[] array = new char[4096];
215 StringBuilder stringBuilder = new StringBuilder(4096);
216 int charCount;
217 while ((charCount = Read(array, 0, array.Length)) != 0)
218 {
219 stringBuilder.Append(array, 0, charCount);
220 }
221 return stringBuilder.ToString();
222 }
223
224 public virtual int ReadBlock(char[] buffer, int index, int count)
225 {
226 int num = 0;
227 int num2;
228 do
229 {
230 num += (num2 = Read(buffer, index + num, count - num));
231 }
232 while (num2 > 0 && num < count);
233 return num;
234 }
235
236 public virtual int ReadBlock(Span<char> buffer)
237 {
238 char[] array = ArrayPool<char>.Shared.Rent(buffer.Length);
239 try
240 {
241 int num = ReadBlock(array, 0, buffer.Length);
242 if ((uint)num > (uint)buffer.Length)
243 {
245 }
246 new Span<char>(array, 0, num).CopyTo(buffer);
247 return num;
248 }
249 finally
250 {
252 }
253 }
254
255 public virtual string? ReadLine()
256 {
257 StringBuilder stringBuilder = new StringBuilder();
258 while (true)
259 {
260 int num = Read();
261 switch (num)
262 {
263 case 10:
264 case 13:
265 if (num == 13 && Peek() == 10)
266 {
267 Read();
268 }
269 return stringBuilder.ToString();
270 case -1:
271 if (stringBuilder.Length > 0)
272 {
273 return stringBuilder.ToString();
274 }
275 return null;
276 }
277 stringBuilder.Append((char)num);
278 }
279 }
280
282 {
283 return Task<string>.Factory.StartNew((object state) => ((TextReader)state).ReadLine(), this, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
284 }
285
286 public virtual async Task<string> ReadToEndAsync()
287 {
288 StringBuilder sb = new StringBuilder(4096);
289 char[] chars = ArrayPool<char>.Shared.Rent(4096);
290 try
291 {
292 int charCount;
293 while ((charCount = await ReadAsyncInternal(chars, default(CancellationToken)).ConfigureAwait(continueOnCapturedContext: false)) != 0)
294 {
295 sb.Append(chars, 0, charCount);
296 }
297 }
298 finally
299 {
301 }
302 return sb.ToString();
303 }
304
305 public virtual Task<int> ReadAsync(char[] buffer, int index, int count)
306 {
307 if (buffer == null)
308 {
309 throw new ArgumentNullException("buffer", SR.ArgumentNull_Buffer);
310 }
311 if (index < 0 || count < 0)
312 {
313 throw new ArgumentOutOfRangeException((index < 0) ? "index" : "count", SR.ArgumentOutOfRange_NeedNonNegNum);
314 }
315 if (buffer.Length - index < count)
316 {
318 }
320 }
321
323 {
324 ArraySegment<char> segment;
325 return new ValueTask<int>(MemoryMarshal.TryGetArray((ReadOnlyMemory<char>)buffer, out segment) ? ReadAsync(segment.Array, segment.Offset, segment.Count) : Task<int>.Factory.StartNew(delegate(object state)
326 {
328 return tupleSlim.Item1.Read(tupleSlim.Item2.Span);
330 }
331
333 {
334 return new ValueTask<int>(Task<int>.Factory.StartNew(delegate(object state)
335 {
337 return tupleSlim.Item1.Read(tupleSlim.Item2.Span);
339 }
340
341 public virtual Task<int> ReadBlockAsync(char[] buffer, int index, int count)
342 {
343 if (buffer == null)
344 {
345 throw new ArgumentNullException("buffer", SR.ArgumentNull_Buffer);
346 }
347 if (index < 0 || count < 0)
348 {
349 throw new ArgumentOutOfRangeException((index < 0) ? "index" : "count", SR.ArgumentOutOfRange_NeedNonNegNum);
350 }
351 if (buffer.Length - index < count)
352 {
354 }
356 }
357
359 {
360 ArraySegment<char> segment;
361 return new ValueTask<int>(MemoryMarshal.TryGetArray((ReadOnlyMemory<char>)buffer, out segment) ? ReadBlockAsync(segment.Array, segment.Offset, segment.Count) : Task<int>.Factory.StartNew(delegate(object state)
362 {
364 return tupleSlim.Item1.ReadBlock(tupleSlim.Item2.Span);
366 }
367
369 {
370 int i = 0;
371 int num;
372 do
373 {
374 num = await ReadAsyncInternal(buffer.Slice(i), cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
375 i += num;
376 }
377 while (num > 0 && i < buffer.Length);
378 return i;
379 }
380
381 public static TextReader Synchronized(TextReader reader)
382 {
383 if (reader == null)
384 {
385 throw new ArgumentNullException("reader");
386 }
387 if (!(reader is SyncTextReader))
388 {
389 return new SyncTextReader(reader);
390 }
391 return reader;
392 }
393}
static ArrayPool< T > Shared
Definition ArrayPool.cs:7
static void SuppressFinalize(object obj)
Definition GC.cs:202
Definition GC.cs:8
override int Read(char[] buffer, int index, int count)
Definition TextReader.cs:14
override Task< int > ReadAsync(char[] buffer, int index, int count)
override int Read(char[] buffer, int index, int count)
Definition TextReader.cs:62
override Task< int > ReadBlockAsync(char[] buffer, int index, int count)
Definition TextReader.cs:98
override void Dispose(bool disposing)
Definition TextReader.cs:41
override Task< string > ReadLineAsync()
Definition TextReader.cs:86
override int ReadBlock(char[] buffer, int index, int count)
Definition TextReader.cs:68
override Task< string > ReadToEndAsync()
Definition TextReader.cs:92
virtual int ReadBlock(char[] buffer, int index, int count)
virtual int Read()
virtual Task< int > ReadAsync(char[] buffer, int index, int count)
virtual ValueTask< int > ReadBlockAsync(Memory< char > buffer, CancellationToken cancellationToken=default(CancellationToken))
static TextReader Synchronized(TextReader reader)
virtual int ReadBlock(Span< char > buffer)
virtual int Read(Span< char > buffer)
virtual Task< string?> ReadLineAsync()
virtual string ReadToEnd()
virtual async Task< string > ReadToEndAsync()
virtual Task< int > ReadBlockAsync(char[] buffer, int index, int count)
virtual ValueTask< int > ReadAsyncInternal(Memory< char > buffer, CancellationToken cancellationToken)
async ValueTask< int > ReadBlockAsyncInternal(Memory< char > buffer, CancellationToken cancellationToken)
static readonly TextReader Null
virtual void Close()
virtual ? string ReadLine()
virtual void Dispose(bool disposing)
virtual ValueTask< int > ReadAsync(Memory< char > buffer, CancellationToken cancellationToken=default(CancellationToken))
virtual int Read(char[] buffer, int index, int count)
virtual int Peek()
static string IO_InvalidReadLength
Definition SR.cs:2068
static string ArgumentNull_Buffer
Definition SR.cs:22
static string Argument_InvalidOffLen
Definition SR.cs:22
static string ArgumentOutOfRange_NeedNonNegNum
Definition SR.cs:32
Definition SR.cs:7
override string ToString()
StringBuilder Append(char value, int repeatCount)
static new TaskFactory< TResult > Factory
Definition Task.cs:56
static Task< TResult > StartNew(Task parent, Func< TResult > function, CancellationToken cancellationToken, TaskCreationOptions creationOptions, InternalTaskOptions internalOptions, TaskScheduler scheduler)
Definition Task.cs:132
readonly T2 Item2
Definition TupleSlim.cs:7
readonly T1 Item1
Definition TupleSlim.cs:5
void CopyTo(Span< T > destination)
Definition Span.cs:224
ConfiguredValueTaskAwaitable ConfigureAwait(bool continueOnCapturedContext)
Definition ValueTask.cs:312