Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
OutputWindow.cs
Go to the documentation of this file.
2
3internal sealed class OutputWindow
4{
5 private readonly byte[] _window = new byte[262144];
6
7 private int _end;
8
9 private int _bytesUsed;
10
11 public int FreeBytes => 262144 - _bytesUsed;
12
13 internal void ClearBytesUsed()
14 {
15 _bytesUsed = 0;
16 }
17
18 public void Write(byte b)
19 {
20 _window[_end++] = b;
21 _end &= 262143;
22 _bytesUsed++;
23 }
24
25 public void WriteLengthDistance(int length, int distance)
26 {
28 int num = (_end - distance) & 0x3FFFF;
29 int num2 = 262144 - length;
30 if (num <= num2 && _end < num2)
31 {
32 if (length <= distance)
33 {
35 _end += length;
36 }
37 else
38 {
39 while (length-- > 0)
40 {
41 _window[_end++] = _window[num++];
42 }
43 }
44 }
45 else
46 {
47 while (length-- > 0)
48 {
49 _window[_end++] = _window[num++];
50 _end &= 262143;
51 num &= 0x3FFFF;
52 }
53 }
54 }
55
57 {
58 length = Math.Min(Math.Min(length, 262144 - _bytesUsed), input.AvailableBytes);
59 int num = 262144 - _end;
60 int num2;
61 if (length > num)
62 {
63 num2 = input.CopyTo(_window, _end, num);
64 if (num2 == num)
65 {
66 num2 += input.CopyTo(_window, 0, length - num);
67 }
68 }
69 else
70 {
71 num2 = input.CopyTo(_window, _end, length);
72 }
73 _end = (_end + num2) & 0x3FFFF;
74 _bytesUsed += num2;
75 return num2;
76 }
77
78 public int CopyTo(Span<byte> output)
79 {
80 int num;
81 if (output.Length > _bytesUsed)
82 {
83 num = _end;
84 output = output.Slice(0, _bytesUsed);
85 }
86 else
87 {
88 num = (_end - _bytesUsed + output.Length) & 0x3FFFF;
89 }
90 int length = output.Length;
91 int num2 = output.Length - num;
92 if (num2 > 0)
93 {
94 _window.AsSpan(262144 - num2, num2).CopyTo(output);
95 output = output.Slice(num2, num);
96 }
97 _window.AsSpan(num - output.Length, output.Length).CopyTo(output);
99 return length;
100 }
101}
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
void WriteLengthDistance(int length, int distance)
int CopyTo(Span< byte > output)
int CopyFrom(InputBuffer input, int length)
static byte Min(byte val1, byte val2)
Definition Math.cs:912
Span< T > Slice(int start)
Definition Span.cs:271
int Length
Definition Span.cs:70