/// <summary>Creates new instance of <see cref="LZ4HighChainEncoder"/></summary> /// <param name="level">Compression level.</param> /// <param name="blockSize">Block size.</param> /// <param name="extraBlocks">Number of extra blocks.</param> public LZ4HighChainEncoder(LZ4Level level, int blockSize, int extraBlocks = 0) : base(true, blockSize, extraBlocks) { if (level < LZ4Level.L03_HC) { level = LZ4Level.L03_HC; } if (level > LZ4Level.L12_MAX) { level = LZ4Level.L12_MAX; } _context = (LZ4Context *)Mem.AllocZero(sizeof(LZ4Context)); LZ4_64_HC.LZ4_resetStreamHC(_context, (int)level); }
/// <summary>Compresses data from one buffer into another.</summary> /// <param name="source">Input buffer.</param> /// <param name="sourceLength">Length of input buffer.</param> /// <param name="target">Output buffer.</param> /// <param name="targetLength">Output buffer length.</param> /// <param name="level">Compression level.</param> /// <returns>Number of bytes written, or negative value if output buffer is too small.</returns> public static unsafe int Encode( byte *source, int sourceLength, byte *target, int targetLength, LZ4Level level = LZ4Level.L00_FAST) { if (sourceLength <= 0) { return(0); } var encoded = level == LZ4Level.L00_FAST ? LZ4_64.LZ4_compress_default(source, target, sourceLength, targetLength) : LZ4_64_HC.LZ4_compress_HC( source, target, sourceLength, targetLength, (int)level); return(encoded <= 0 ? -1 : encoded); }
/// <inheritdoc /> protected override int CopyDict(byte *target, int length) => LZ4_64_HC.LZ4_saveDictHC(_context, target, length);
/// <inheritdoc /> protected override int EncodeBlock( byte *source, int sourceLength, byte *target, int targetLength) => LZ4_64_HC.LZ4_compress_HC_continue( _context, source, target, sourceLength, targetLength);
protected override int CopyDict(byte *buffer, int length) => LZ4_64_HC.LZ4_saveDictHC(_context, buffer, length);