Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ValueStringBuilder.cs
Go to the documentation of this file.
4
5namespace System.Text;
6
7[DefaultMember("Item")]
8internal ref struct ValueStringBuilder
9{
10 private char[] _arrayToReturnToPool;
11
12 private Span<char> _chars;
13
14 private int _pos;
15
16 public int Length
17 {
18 get
19 {
20 return _pos;
21 }
22 set
23 {
24 _pos = value;
25 }
26 }
27
28 public ValueStringBuilder(Span<char> initialBuffer)
29 {
31 _chars = initialBuffer;
32 _pos = 0;
33 }
34
35 public override string ToString()
36 {
37 string result = _chars.Slice(0, _pos).ToString();
38 Dispose();
39 return result;
40 }
41
43 {
44 return _chars.Slice(0, _pos);
45 }
46
47 [MethodImpl(MethodImplOptions.AggressiveInlining)]
49 {
50 int pos = _pos;
51 if (pos > _chars.Length - length)
52 {
53 Grow(length);
54 }
55 _pos = pos + length;
56 return _chars.Slice(pos, length);
57 }
58
59 [MethodImpl(MethodImplOptions.NoInlining)]
60 private void Grow(int additionalCapacityBeyondPos)
61 {
62 char[] array = ArrayPool<char>.Shared.Rent((int)Math.Max((uint)(_pos + additionalCapacityBeyondPos), (uint)(_chars.Length * 2)));
63 _chars.Slice(0, _pos).CopyTo(array);
64 char[] arrayToReturnToPool = _arrayToReturnToPool;
66 if (arrayToReturnToPool != null)
67 {
68 ArrayPool<char>.Shared.Return(arrayToReturnToPool);
69 }
70 }
71
72 [MethodImpl(MethodImplOptions.AggressiveInlining)]
73 public void Dispose()
74 {
75 char[] arrayToReturnToPool = _arrayToReturnToPool;
76 this = default(System.Text.ValueStringBuilder);
77 if (arrayToReturnToPool != null)
78 {
79 ArrayPool<char>.Shared.Return(arrayToReturnToPool);
80 }
81 }
82}
static ArrayPool< T > Shared
Definition ArrayPool.cs:7
static byte Max(byte val1, byte val2)
Definition Math.cs:738
Span< T > Slice(int start)
Definition Span.cs:271
int Length
Definition Span.cs:70
ValueStringBuilder(Span< char > initialBuffer)
Span< char > AppendSpan(int length)
void Grow(int additionalCapacityBeyondPos)