Example #1
0
 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));
         }
     }
 }
Example #2
0
        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));
                }
            }
        }