Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ValueStringBuilder.cs
Go to the documentation of this file.
5
6namespace System.Text;
7
8[DefaultMember("Item")]
9internal ref struct ValueStringBuilder
10{
11 private char[] _arrayToReturnToPool;
12
14
15 private int _pos;
16
17 public int Length
18 {
19 set
20 {
21 _pos = value;
22 }
23 }
24
25 public int Capacity => _chars.Length;
26
27 public ValueStringBuilder(Span<char> initialBuffer)
28 {
30 _chars = initialBuffer;
31 _pos = 0;
32 }
33
34 public void EnsureCapacity(int capacity)
35 {
36 if ((uint)capacity > (uint)_chars.Length)
37 {
39 }
40 }
41
42 public ref char GetPinnableReference()
43 {
44 return ref MemoryMarshal.GetReference(_chars);
45 }
46
47 public override string ToString()
48 {
49 string result = _chars.Slice(0, _pos).ToString();
50 Dispose();
51 return result;
52 }
53
54 [MethodImpl(MethodImplOptions.NoInlining)]
55 private void Grow(int additionalCapacityBeyondPos)
56 {
57 char[] array = ArrayPool<char>.Shared.Rent((int)Math.Max((uint)(_pos + additionalCapacityBeyondPos), (uint)(_chars.Length * 2)));
58 _chars.Slice(0, _pos).CopyTo(array);
59 char[] arrayToReturnToPool = _arrayToReturnToPool;
61 if (arrayToReturnToPool != null)
62 {
63 ArrayPool<char>.Shared.Return(arrayToReturnToPool);
64 }
65 }
66
67 [MethodImpl(MethodImplOptions.AggressiveInlining)]
68 public void Dispose()
69 {
70 char[] arrayToReturnToPool = _arrayToReturnToPool;
71 this = default(System.Text.ValueStringBuilder);
72 if (arrayToReturnToPool != null)
73 {
74 ArrayPool<char>.Shared.Return(arrayToReturnToPool);
75 }
76 }
77}
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)
void Grow(int additionalCapacityBeyondPos)