Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DynamicTable.cs
Go to the documentation of this file.
1
namespace
System.Net.Http.HPack
;
2
3
internal
sealed
class
DynamicTable
4
{
5
private
HeaderField
[]
_buffer
;
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
{
28
index
+=
_buffer
.
Length
;
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
40
public
void
Insert
(
ReadOnlySpan<byte>
name,
ReadOnlySpan<byte>
value
)
41
{
42
int
length
=
HeaderField
.
GetLength
(name.Length,
value
.Length);
43
EnsureAvailable
(
length
);
44
if
(
length
<=
_maxSize
)
45
{
46
HeaderField
headerField =
new
HeaderField
(name,
value
);
47
_buffer
[
_insertIndex
] = headerField;
48
_insertIndex
= (
_insertIndex
+ 1) %
_buffer
.
Length
;
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];
59
int
num =
Math
.
Min
(
_buffer
.
Length
-
_removeIndex
,
_count
);
60
int
length
=
_count
- num;
61
Array
.
Copy
(
_buffer
,
_removeIndex
,
array
, 0, num);
62
Array
.
Copy
(
_buffer
, 0,
array
, num,
length
);
63
_buffer
=
array
;
64
_removeIndex
= 0;
65
_insertIndex
=
_count
;
66
_maxSize
= maxSize;
67
}
68
else
69
{
70
_maxSize
= maxSize;
71
EnsureAvailable
(0);
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
--;
83
_removeIndex
= (
_removeIndex
+ 1) %
_buffer
.
Length
;
84
}
85
}
86
}
System.Array.Copy
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition
Array.cs:624
System.Array
Definition
Array.cs:16
System.IndexOutOfRangeException
Definition
IndexOutOfRangeException.cs:9
System.Math.Min
static byte Min(byte val1, byte val2)
Definition
Math.cs:912
System.Math
Definition
Math.cs:13
System.Net.Http.HPack.DynamicTable.Insert
void Insert(ReadOnlySpan< byte > name, ReadOnlySpan< byte > value)
Definition
DynamicTable.cs:40
System.Net.Http.HPack.DynamicTable._buffer
HeaderField[] _buffer
Definition
DynamicTable.cs:5
System.Net.Http.HPack.DynamicTable._size
int _size
Definition
DynamicTable.cs:9
System.Net.Http.HPack.DynamicTable._count
int _count
Definition
DynamicTable.cs:11
System.Net.Http.HPack.DynamicTable.Resize
void Resize(int maxSize)
Definition
DynamicTable.cs:54
System.Net.Http.HPack.DynamicTable._removeIndex
int _removeIndex
Definition
DynamicTable.cs:15
System.Net.Http.HPack.DynamicTable.EnsureAvailable
void EnsureAvailable(int available)
Definition
DynamicTable.cs:75
System.Net.Http.HPack.DynamicTable._maxSize
int _maxSize
Definition
DynamicTable.cs:7
System.Net.Http.HPack.DynamicTable.DynamicTable
DynamicTable(int maxSize)
Definition
DynamicTable.cs:34
System.Net.Http.HPack.DynamicTable._insertIndex
int _insertIndex
Definition
DynamicTable.cs:13
System.Net.Http.HPack.DynamicTable
Definition
DynamicTable.cs:4
System.Net.Http.HPack
Definition
DynamicTable.cs:1
System.ExceptionArgument.value
@ value
System.ExceptionArgument.length
@ length
System.ExceptionArgument.index
@ index
System.ExceptionArgument.array
@ array
System.Net.Http.HPack.HeaderField.GetLength
static int GetLength(int nameLength, int valueLength)
Definition
HeaderField.cs:19
System.Net.Http.HPack.HeaderField.Length
int Length
Definition
HeaderField.cs:11
System.Net.Http.HPack.HeaderField
Definition
HeaderField.cs:6
System.ReadOnlySpan
Definition
ReadOnlySpan.cs:14
source
System.Net.Http
System.Net.Http.HPack
DynamicTable.cs
Generated by
1.10.0