Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DynamicTable.cs
Go to the documentation of this file.
2
3internal sealed class DynamicTable
4{
6
7 private int _maxSize;
8
9 private int _size;
10
11 private int _count;
12
13 private int _insertIndex;
14
15 private int _removeIndex;
16
17 public ref readonly HeaderField this[int index]
18 {
19 get
20 {
21 if (index >= _count)
22 {
23 throw new IndexOutOfRangeException();
24 }
25 index = _insertIndex - index - 1;
26 if (index < 0)
27 {
29 }
30 return ref _buffer[index];
31 }
32 }
33
34 public DynamicTable(int maxSize)
35 {
36 _buffer = new HeaderField[maxSize / 32];
37 _maxSize = maxSize;
38 }
39
41 {
42 int length = HeaderField.GetLength(name.Length, value.Length);
44 if (length <= _maxSize)
45 {
46 HeaderField headerField = new HeaderField(name, value);
47 _buffer[_insertIndex] = headerField;
49 _size += headerField.Length;
50 _count++;
51 }
52 }
53
54 public void Resize(int maxSize)
55 {
56 if (maxSize > _maxSize)
57 {
58 HeaderField[] array = new HeaderField[maxSize / 32];
60 int length = _count - num;
62 Array.Copy(_buffer, 0, array, num, length);
63 _buffer = array;
64 _removeIndex = 0;
66 _maxSize = maxSize;
67 }
68 else
69 {
70 _maxSize = maxSize;
72 }
73 }
74
75 private void EnsureAvailable(int available)
76 {
77 while (_count > 0 && _maxSize - _size < available)
78 {
79 ref HeaderField reference = ref _buffer[_removeIndex];
80 _size -= reference.Length;
81 reference = default(HeaderField);
82 _count--;
84 }
85 }
86}
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
static byte Min(byte val1, byte val2)
Definition Math.cs:912
void Insert(ReadOnlySpan< byte > name, ReadOnlySpan< byte > value)
void EnsureAvailable(int available)
static int GetLength(int nameLength, int valueLength)