public static BrotliNative.BrotliDecoderResult Decompress(ReadOnlySpan <byte> source, Span <byte> destination, out nuint bytesConsumed, out nuint bytesWritten) { unsafe { bytesConsumed = (nuint)source.Length; bytesWritten = (nuint)0; IntPtr bufIn, bufOut; fixed(byte *inBytes = &source.DangerousGetPinnableReference()) fixed(byte *outBytes = &destination.DangerousGetPinnableReference()) { bufIn = new IntPtr(inBytes); bufOut = new IntPtr(outBytes); return(BrotliNative.BrotliDecoderDecompress(ref bytesConsumed, bufIn, ref bytesWritten, bufOut)); } } }
public static TransformationStatus Decompress(ReadOnlySpan <byte> source, Span <byte> destination, out int bytesConsumed, out int bytesWritten) { bytesConsumed = bytesWritten = 0; unsafe { IntPtr bufIn, bufOut; fixed(byte *inBytes = &source.DangerousGetPinnableReference()) fixed(byte *outBytes = &destination.DangerousGetPinnableReference()) { bufIn = new IntPtr(inBytes); bufOut = new IntPtr(outBytes); nuint written = (nuint)destination.Length; nuint consumed = (nuint)source.Length; BrotliDecoderResult res = BrotliNative.BrotliDecoderDecompress(ref consumed, bufIn, ref written, bufOut); if (res == BrotliDecoderResult.Success) { bytesWritten = (int)written; bytesConsumed = (int)consumed; } return(GetTransformationStatusFromBrotliDecoderResult(res)); } } }