public static TransformationStatus Compress(ReadOnlySpan <byte> source, Span <byte> destination, out int bytesConsumed, out int bytesWritten, int quality = DefaultQuality, int windowSize = DefaultWindowSize, BrotliEncoderMode encMode = BrotliEncoderMode.Generic) { if (quality > DefaultQuality || quality <= 0) { throw new System.ArgumentOutOfRangeException(BrotliEx.WrongQuality); } if (windowSize > DefaultWindowSize || windowSize <= 0) { throw new System.ArgumentOutOfRangeException(BrotliEx.WrongWindowSize); } 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; if (!BrotliNative.BrotliEncoderCompress(quality, windowSize, encMode, consumed, bufIn, ref written, bufOut)) { return(TransformationStatus.InvalidData); } ; bytesConsumed = (int)consumed; bytesWritten = (int)written; return(TransformationStatus.Done); } } }
public static bool Compress(ReadOnlySpan <byte> source, Span <byte> destination, out nuint bytesConsumed, out nuint bytesWritten, int quality, int lgwin) { 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.BrotliEncoderCompress(quality, lgwin, BrotliNative.BrotliEncoderMode.Generic, bytesConsumed, bufIn, ref bytesWritten, bufOut)); } } }