Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
BrotliDecoder.cs
Go to the documentation of this file.
1
using
System.Buffers
;
2
using
System.Runtime.InteropServices
;
3
using
Microsoft.Win32.SafeHandles
;
4
5
namespace
System.IO.Compression
;
6
7
public
struct
BrotliDecoder
:
IDisposable
8
{
9
private
SafeBrotliDecoderHandle
_state
;
10
11
private
bool
_disposed
;
12
13
internal
void
InitializeDecoder
()
14
{
15
_state
= global::Interop.Brotli.BrotliDecoderCreateInstance(
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
);
16
if
(
_state
.
IsInvalid
)
17
{
18
throw
new
IOException
(
System
.
SR
.
BrotliDecoder_Create
);
19
}
20
}
21
22
internal
void
EnsureInitialized
()
23
{
24
EnsureNotDisposed
();
25
if
(
_state
==
null
)
26
{
27
InitializeDecoder
();
28
}
29
}
30
31
public
void
Dispose
()
32
{
33
_disposed
=
true
;
34
_state
?.
Dispose
();
35
}
36
37
private
void
EnsureNotDisposed
()
38
{
39
if
(
_disposed
)
40
{
41
throw
new
ObjectDisposedException
(
"BrotliDecoder"
,
System
.
SR
.
BrotliDecoder_Disposed
);
42
}
43
}
44
45
public
unsafe
OperationStatus
Decompress
(
ReadOnlySpan<byte>
source
,
Span<byte>
destination
, out
int
bytesConsumed, out
int
bytesWritten)
46
{
47
EnsureInitialized
();
48
bytesConsumed = 0;
49
bytesWritten = 0;
50
if
(global::Interop.Brotli.BrotliDecoderIsFinished(
_state
) != 0)
51
{
52
return
OperationStatus
.Done;
53
}
54
nuint availableOut = (nuint)
destination
.Length;
55
nuint availableIn = (nuint)
source
.Length;
56
while
((
int
)availableOut > 0)
57
{
58
fixed (
byte
* ptr = &
MemoryMarshal
.GetReference(
source
))
59
{
60
byte
* ptr2 = ptr;
61
fixed (
byte
* ptr3 = &
MemoryMarshal
.GetReference(
destination
))
62
{
63
byte
* ptr4 = ptr3;
64
UIntPtr
totalOut;
65
int
num = global::Interop.Brotli.BrotliDecoderDecompressStream(
_state
, ref availableIn, &ptr2, ref availableOut, &ptr4, out totalOut);
66
if
(num == 0)
67
{
68
return
OperationStatus
.InvalidData;
69
}
70
bytesConsumed += source.Length - (int)availableIn;
71
bytesWritten += destination.Length - (int)availableOut;
72
switch
(num)
73
{
74
case
1:
75
return
OperationStatus
.Done;
76
case
3:
77
return
OperationStatus
.DestinationTooSmall;
78
}
79
source
=
source
.Slice(
source
.Length - (
int
)availableIn);
80
destination
=
destination
.Slice(
destination
.Length - (
int
)availableOut);
81
if
(num == 2 &&
source
.Length == 0)
82
{
83
return
OperationStatus
.NeedMoreData;
84
}
85
}
86
}
87
}
88
return
OperationStatus
.DestinationTooSmall;
89
}
90
91
public
unsafe
static
bool
TryDecompress
(
ReadOnlySpan<byte>
source
,
Span<byte>
destination
, out
int
bytesWritten)
92
{
93
fixed (
byte
* inBytes = &
MemoryMarshal
.GetReference(
source
))
94
{
95
fixed (
byte
* outBytes = &
MemoryMarshal
.GetReference(
destination
))
96
{
97
nuint num = (nuint)
destination
.Length;
98
bool
result = global::Interop.Brotli.BrotliDecoderDecompress((nuint)
source
.Length, inBytes, &num, outBytes) != global::Interop.BOOL.FALSE;
99
bytesWritten = (int)num;
100
return
result;
101
}
102
}
103
}
104
}
Microsoft.Win32.SafeHandles.SafeBrotliDecoderHandle.IsInvalid
override bool IsInvalid
Definition
SafeBrotliDecoderHandle.cs:8
Microsoft.Win32.SafeHandles.SafeBrotliDecoderHandle
Definition
SafeBrotliDecoderHandle.cs:7
System.IO.IOException
Definition
IOException.cs:9
System.ObjectDisposedException
Definition
ObjectDisposedException.cs:9
System.Runtime.InteropServices.MemoryMarshal
Definition
MemoryMarshal.cs:11
System.Runtime.InteropServices.SafeHandle.Dispose
void Dispose()
Definition
SafeHandle.cs:57
System.SR.BrotliDecoder_Create
static string BrotliDecoder_Create
Definition
SR.cs:34
System.SR.BrotliDecoder_Disposed
static string BrotliDecoder_Disposed
Definition
SR.cs:36
System.SR
Definition
SR.cs:7
System.IDisposable
Definition
IDisposable.cs:4
Microsoft.Win32.SafeHandles
Definition
SafeProcessHandle.cs:3
System.Buffers.OperationStatus
OperationStatus
Definition
OperationStatus.cs:4
System.Buffers
Definition
Base64.cs:7
System.IO.Compression
Definition
BrotliDecoder.cs:5
System.Runtime.InteropServices
Definition
SequenceMarshal.cs:4
System.ExceptionArgument.source
@ source
System.ExceptionArgument.destination
@ destination
System
Definition
BlockingCollection.cs:8
System.IO.Compression.BrotliDecoder._disposed
bool _disposed
Definition
BrotliDecoder.cs:11
System.IO.Compression.BrotliDecoder.InitializeDecoder
void InitializeDecoder()
Definition
BrotliDecoder.cs:13
System.IO.Compression.BrotliDecoder.Dispose
void Dispose()
Definition
BrotliDecoder.cs:31
System.IO.Compression.BrotliDecoder.EnsureInitialized
void EnsureInitialized()
Definition
BrotliDecoder.cs:22
System.IO.Compression.BrotliDecoder._state
SafeBrotliDecoderHandle _state
Definition
BrotliDecoder.cs:9
System.IO.Compression.BrotliDecoder.TryDecompress
static unsafe bool TryDecompress(ReadOnlySpan< byte > source, Span< byte > destination, out int bytesWritten)
Definition
BrotliDecoder.cs:91
System.IO.Compression.BrotliDecoder.EnsureNotDisposed
void EnsureNotDisposed()
Definition
BrotliDecoder.cs:37
System.IO.Compression.BrotliDecoder.Decompress
unsafe OperationStatus Decompress(ReadOnlySpan< byte > source, Span< byte > destination, out int bytesConsumed, out int bytesWritten)
Definition
BrotliDecoder.cs:45
System.IO.Compression.BrotliDecoder
Definition
BrotliDecoder.cs:8
System.IntPtr.Zero
static readonly IntPtr Zero
Definition
IntPtr.cs:18
System.IntPtr
Definition
IntPtr.cs:14
System.ReadOnlySpan
Definition
ReadOnlySpan.cs:14
System.Span
Definition
Span.cs:14
System.UIntPtr
Definition
UIntPtr.cs:15
source
System.IO.Compression.Brotli
System.IO.Compression
BrotliDecoder.cs
Generated by
1.10.0