public unsafe void Init(Stream stream, CompressionMode mode, LZMAOptionLZMA *opts) { _compressedStream = stream; _mode = mode; _isClosed = false; _zstreamBuff = new byte[sizeof(LZMAStreamNative)]; _zstreamHandle = GCHandle.Alloc(_zstreamBuff, GCHandleType.Pinned); _zstream = (LZMAStreamNative *)_zstreamHandle.AddrOfPinnedObject().ToPointer(); _tmpBuffer = new byte[BufferSize]; _tmpBufferHandle = GCHandle.Alloc(_tmpBuffer, GCHandleType.Pinned); _tmpBufferPtr = _tmpBufferHandle.AddrOfPinnedObject().ToPointer(); LZMAStatus ret; switch (mode) { case CompressionMode.Compress: // We will always use one filter, + 1 to mark the end of the filter array var filters = stackalloc LZMAFilter[2]; filters[0].id = LZMANative.LZMA_FILTER_LZMA2; filters[0].options = opts; filters[1].id = LZMANative.LZMA_VLI_UNKNOWN; ret = LZMANative.lzma_stream_encoder(_zstream, filters, LZMACheck.LZMA_CHECK_CRC64); if (ret != LZMAStatus.LZMA_OK) { throw new ArgumentException(string.Format("Unable to init LZMA decoder. Return code: {0}", ret)); } _zstream->next_out = _tmpBufferPtr; _zstream->avail_out = (IntPtr)_tmpBuffer.Length; break; case CompressionMode.Decompress: ret = LZMANative.lzma_auto_decoder(_zstream, 1024 * 1024 * 1024, 0); if (ret != LZMAStatus.LZMA_OK) { throw new ArgumentException(string.Format("Unable to init LZMA decoder. Return code: {0}", ret)); } break; } }
public unsafe void Init(Stream stream, CompressionMode mode, LZMAOptionLZMA *opts) { _compressedStream = stream; _mode = mode; _isClosed = false; _zstreamBuff = new byte[sizeof(LZMAStreamNative)]; _zstreamHandle = GCHandle.Alloc(_zstreamBuff, GCHandleType.Pinned); _zstream = (LZMAStreamNative*)_zstreamHandle.AddrOfPinnedObject().ToPointer(); _tmpBuffer = new byte[BufferSize]; _tmpBufferHandle = GCHandle.Alloc(_tmpBuffer, GCHandleType.Pinned); _tmpBufferPtr = _tmpBufferHandle.AddrOfPinnedObject().ToPointer(); LZMAStatus ret; switch (mode) { case CompressionMode.Compress: // We will always use one filter, + 1 to mark the end of the filter array var filters = stackalloc LZMAFilter[2]; filters[0].id = LZMANative.LZMA_FILTER_LZMA2; filters[0].options = opts; filters[1].id = LZMANative.LZMA_VLI_UNKNOWN; ret = LZMANative.lzma_stream_encoder(_zstream, filters, LZMACheck.LZMA_CHECK_CRC64); if (ret != LZMAStatus.LZMA_OK) throw new ArgumentException(string.Format("Unable to init LZMA decoder. Return code: {0}", ret)); _zstream->next_out = _tmpBufferPtr; _zstream->avail_out = (IntPtr)_tmpBuffer.Length; break; case CompressionMode.Decompress: ret = LZMANative.lzma_auto_decoder(_zstream, 1024 * 1024 * 1024, 0); if (ret != LZMAStatus.LZMA_OK) throw new ArgumentException(string.Format("Unable to init LZMA decoder. Return code: {0}", ret)); break; } }
public unsafe void Init(Stream stream, CompressionMode mode, uint preset) { _compressedStream = stream; _mode = mode; _isClosed = false; _zstreamBuff = new byte[sizeof(LZMAStreamNative)]; _zstreamHandle = GCHandle.Alloc(_zstreamBuff, GCHandleType.Pinned); _zstream = (LZMAStreamNative *)_zstreamHandle.AddrOfPinnedObject().ToPointer(); _tmpBuffer = new byte[BufferSize]; _tmpBufferHandle = GCHandle.Alloc(_tmpBuffer, GCHandleType.Pinned); _tmpBufferPtr = _tmpBufferHandle.AddrOfPinnedObject().ToPointer(); LZMAStatus ret; switch (mode) { case CompressionMode.Compress: ret = LZMANative.lzma_easy_encoder(_zstream, preset, LZMACheck.LZMA_CHECK_CRC64); if (ret != LZMAStatus.LZMA_OK) { throw new ArgumentException(string.Format("Unable to init LZMA decoder. Return code: {0}", ret)); } _zstream->next_out = _tmpBufferPtr; _zstream->avail_out = (IntPtr)_tmpBuffer.Length; break; case CompressionMode.Decompress: ret = LZMANative.lzma_auto_decoder(_zstream, 1024 * 1024 * 1024, 0); if (ret != LZMAStatus.LZMA_OK) { throw new ArgumentException(string.Format("Unable to init LZMA decoder. Return code: {0}", ret)); } break; } }
public unsafe void Init(Stream stream, CompressionMode mode, uint preset) { _compressedStream = stream; _mode = mode; _isClosed = false; _zstreamBuff = new byte[sizeof(LZMAStreamNative)]; _zstreamHandle = GCHandle.Alloc(_zstreamBuff, GCHandleType.Pinned); _zstream = (LZMAStreamNative*)_zstreamHandle.AddrOfPinnedObject().ToPointer(); _tmpBuffer = new byte[BufferSize]; _tmpBufferHandle = GCHandle.Alloc(_tmpBuffer, GCHandleType.Pinned); _tmpBufferPtr = _tmpBufferHandle.AddrOfPinnedObject().ToPointer(); LZMAStatus ret; switch (mode) { case CompressionMode.Compress: ret = LZMANative.lzma_easy_encoder(_zstream, preset, LZMACheck.LZMA_CHECK_CRC64); if (ret != LZMAStatus.LZMA_OK) throw new ArgumentException(string.Format("Unable to init LZMA decoder. Return code: {0}", ret)); _zstream->next_out = _tmpBufferPtr; _zstream->avail_out = (IntPtr)_tmpBuffer.Length; break; case CompressionMode.Decompress: ret = LZMANative.lzma_auto_decoder(_zstream, 1024 * 1024 * 1024, 0); if (ret != LZMAStatus.LZMA_OK) throw new ArgumentException(string.Format("Unable to init LZMA decoder. Return code: {0}", ret)); break; } }
public static extern unsafe LZMAStatus lzma_easy_encoder(LZMAStreamNative *strm, uint preset, LZMACheck check);
public static extern unsafe LZMAStatus lzma_alone_encoder(LZMAStreamNative *strm, ref LZMAOptionLZMA options);
public static extern unsafe LZMAStatus lzma_code(LZMAStreamNative *strm, LZMAAction action);
public static extern unsafe LZMAStatus lzma_auto_decoder(LZMAStreamNative *strm, ulong memlimit, uint flags);
public static extern unsafe LZMAStatus lzma_memlimit_set(LZMAStreamNative *strm, ulong memlimit);
public static extern unsafe ulong lzma_memlimit_get(LZMAStreamNative *strm);
public static extern unsafe ulong lzma_memusage(LZMAStreamNative *strm);
public static extern unsafe LZMAStatus lzma_stream_encoder(LZMAStreamNative *strm, void *filters, LZMACheck check);