Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GrowAvailableSpace() [2/2]

void System.Net.MultiArrayBuffer.GrowAvailableSpace ( int byteCount)
inline

Definition at line 101 of file MultiArrayBuffer.cs.

102 {
103 uint num = (uint)(byteCount - AvailableMemory.Length);
104 uint num2 = (num + 16384 - 1) / 16384;
105 if (_blocks == null)
106 {
107 int num3;
108 for (num3 = 4; num3 < num2; num3 *= 2)
109 {
110 }
111 _blocks = new byte[num3][];
112 }
113 else
114 {
115 uint num4 = _allocatedEnd / 16384;
116 uint num5 = (uint)_blocks.Length;
117 if (num4 + num2 > num5)
118 {
119 uint num6 = _activeStart / 16384;
120 uint num7 = num4 - num6;
121 uint num8 = num7 + num2;
122 Span<byte[]> span;
123 if (num8 > num5)
124 {
125 while (num5 < num8)
126 {
127 num5 *= 2;
128 }
129 byte[][] array = new byte[num5][];
130 span = _blocks.AsSpan();
131 span = span.Slice((int)num6, (int)num7);
132 span.CopyTo(array);
133 _blocks = array;
134 }
135 else
136 {
137 span = _blocks.AsSpan();
138 span = span.Slice((int)num6, (int)num7);
139 span.CopyTo(_blocks);
140 span = _blocks.AsSpan();
141 span = span.Slice((int)num7, (int)num6);
142 span.Clear();
143 }
144 uint num9 = num6 * 16384;
145 _allocatedEnd -= num9;
146 _activeStart -= num9;
147 _availableStart -= num9;
148 }
149 }
150 uint num10 = _allocatedEnd / 16384;
151 for (uint num11 = 0u; num11 < num2; num11++)
152 {
153 _blocks[num10++] = ArrayPool<byte>.Shared.Rent(16384);
154 }
155 _allocatedEnd = num10 * 16384;
156 }
static ArrayPool< T > Shared
Definition ArrayPool.cs:7
System.Net.MultiMemory AvailableMemory

References System.Net.MultiArrayBuffer._activeStart, System.Net.MultiArrayBuffer._allocatedEnd, System.Net.MultiArrayBuffer._availableStart, System.Net.MultiArrayBuffer._blocks, System.array, System.Net.MultiArrayBuffer.AvailableMemory, System.byteCount, System.Span< T >.Clear(), System.Span< T >.CopyTo(), System.Buffers.ArrayPool< T >.Shared, and System.Span< T >.Slice().