Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ArrayBufferWriter.cs
Go to the documentation of this file.
1namespace System.Buffers;
2
3public sealed class ArrayBufferWriter<T> : IBufferWriter<T>
4{
5 private T[] _buffer;
6
7 private int _index;
8
10
12
13 public int WrittenCount => _index;
14
15 public int Capacity => _buffer.Length;
16
17 public int FreeCapacity => _buffer.Length - _index;
18
20 {
21 _buffer = Array.Empty<T>();
22 _index = 0;
23 }
24
25 public ArrayBufferWriter(int initialCapacity)
26 {
27 if (initialCapacity <= 0)
28 {
29 throw new ArgumentException(null, "initialCapacity");
30 }
31 _buffer = new T[initialCapacity];
32 _index = 0;
33 }
34
35 public void Clear()
36 {
37 _buffer.AsSpan(0, _index).Clear();
38 _index = 0;
39 }
40
41 public void Advance(int count)
42 {
43 if (count < 0)
44 {
45 throw new ArgumentException(null, "count");
46 }
47 if (_index > _buffer.Length - count)
48 {
50 }
51 _index += count;
52 }
53
54 public Memory<T> GetMemory(int sizeHint = 0)
55 {
56 CheckAndResizeBuffer(sizeHint);
57 return _buffer.AsMemory(_index);
58 }
59
60 public Span<T> GetSpan(int sizeHint = 0)
61 {
62 CheckAndResizeBuffer(sizeHint);
63 return _buffer.AsSpan(_index);
64 }
65
66 private void CheckAndResizeBuffer(int sizeHint)
67 {
68 if (sizeHint < 0)
69 {
70 throw new ArgumentException("sizeHint");
71 }
72 if (sizeHint == 0)
73 {
74 sizeHint = 1;
75 }
76 if (sizeHint <= FreeCapacity)
77 {
78 return;
79 }
80 int num = _buffer.Length;
81 int num2 = Math.Max(sizeHint, num);
82 if (num == 0)
83 {
84 num2 = Math.Max(num2, 256);
85 }
86 int num3 = num + num2;
87 if ((uint)num3 > 2147483647u)
88 {
89 uint num4 = (uint)(num - FreeCapacity + sizeHint);
90 if (num4 > 2147483591)
91 {
93 }
94 num3 = 2147483591;
95 }
96 Array.Resize(ref _buffer, num3);
97 }
98
103
108}
static void ThrowOutOfMemoryException(uint capacity)
Memory< T > GetMemory(int sizeHint=0)
static void ThrowInvalidOperationException_AdvancedTooFar(int capacity)
ArrayBufferWriter(int initialCapacity)
Span< T > GetSpan(int sizeHint=0)
static byte Max(byte val1, byte val2)
Definition Math.cs:738
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string BufferMaximumSizeExceeded
Definition SR.cs:18
static string BufferWriterAdvancedTooFar
Definition SR.cs:16
Definition SR.cs:7