public unsafe int Wrap(ReadOnlySpan <byte> src, Span <byte> dst, int compressionLevel = 3) { if (src.Length == 0) { return(0); } UIntPtr dstSize; fixed(byte *dstPtr = dst) fixed(byte *srcPtr = src) { if (Options.Cdict == IntPtr.Zero) { dstSize = ExternMethods.ZSTD_compressCCtx(cctx, dstPtr, (UIntPtr)dst.Length, srcPtr, (UIntPtr)src.Length, compressionLevel); } else { dstSize = ExternMethods.ZSTD_compress_usingCDict(cctx, dstPtr, (UIntPtr)dst.Length, srcPtr, (UIntPtr)src.Length, Options.Cdict); } } ReturnValueExtensions.EnsureZdictSuccess(dstSize); return((int)dstSize); }
public static byte[] TrainFromBuffer(IEnumerable <byte[]> samples, int dictCapacity = DefaultDictCapacity) { var ms = new MemoryStream(); var samplesSizes = samples.Select(sample => { ms.Write(sample, 0, sample.Length); return((UIntPtr)sample.Length); }).ToArray(); var dictBuffer = new byte[dictCapacity]; var dictSize = ExternMethods.ZDICT_trainFromBuffer(dictBuffer, (UIntPtr)dictCapacity, ms.ToArray(), samplesSizes, (uint)samplesSizes.Length); ReturnValueExtensions.EnsureZdictSuccess(dictSize); if (dictCapacity != (int)dictSize) { Array.Resize(ref dictBuffer, (int)dictSize); } return(dictBuffer); }