diff options
| author | ruki <[email protected]> | 2022-05-11 00:13:06 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-05-11 00:13:06 +0800 |
| commit | 24c144ab6be8c6a86cdc555b371b86ea50e2322a (patch) | |
| tree | 5e9289639c7dc4424659510941a72108037dca44 | |
| parent | 2ff70579a8473302cec690f4651f9be865073833 (diff) | |
new compress stream
| -rw-r--r-- | xmake/core/compress/lz4.lua | 81 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/import/core/compress/lz4.lua | 18 |
2 files changed, 92 insertions, 7 deletions
diff --git a/xmake/core/compress/lz4.lua b/xmake/core/compress/lz4.lua index 3c1918ab5..a6af2a77e 100644 --- a/xmake/core/compress/lz4.lua +++ b/xmake/core/compress/lz4.lua @@ -19,20 +19,87 @@ -- -- define module: lz4 -local lz4 = lz4 or {} +local lz4 = lz4 or {} +local _cstream = _cstream or {} +local _dstream = _dstream or {} -- load modules local io = require("base/io") local utils = require("base/utils") local bytes = require("base/bytes") +local table = require("base/table") -- save metatable and builtin functions -lz4._compress = lz4._compress or lz4.compress -lz4._decompress = lz4._decompress or lz4.decompress -lz4._block_compress = lz4._block_compress or lz4.block_compress -lz4._block_decompress = lz4._block_decompress or lz4.block_decompress -lz4._compress_file = lz4._compress_file or lz4.compress_file -lz4._decompress_file = lz4._decompress_file or lz4.decompress_file +lz4._compress = lz4._compress or lz4.compress +lz4._decompress = lz4._decompress or lz4.decompress +lz4._block_compress = lz4._block_compress or lz4.block_compress +lz4._block_decompress = lz4._block_decompress or lz4.block_decompress +lz4._compress_file = lz4._compress_file or lz4.compress_file +lz4._decompress_file = lz4._decompress_file or lz4.decompress_file +lz4._compress_stream_open = lz4._compress_stream_open or lz4.compress_stream_open +lz4._compress_stream_close = lz4._compress_stream_close or lz4.compress_stream_close +lz4._decompress_stream_open = lz4._decompress_stream_open or lz4.decompress_stream_open +lz4._decompress_stream_close = lz4._decompress_stream_close or lz4.decompress_stream_close + +-- new a compress stream +function _cstream.new(handle) + local instance = table.inherit(_cstream) + instance._HANDLE = handle + setmetatable(instance, _cstream) + return instance +end + +-- get cdata of stream +function _cstream:cdata() + return self._HANDLE +end + +-- gc(stream) +function _cstream:__gc() + if self:cdata() and lz4._compress_stream_close(self:cdata()) then + self._HANDLE = nil + end +end + +-- new a decompress stream +function _dstream.new(handle) + local instance = table.inherit(_dstream) + instance._HANDLE = handle + setmetatable(instance, _dstream) + return instance +end + +-- get cdata of stream +function _dstream:cdata() + return self._HANDLE +end + +-- gc(stream) +function _dstream:__gc() + if self:cdata() and lz4._decompress_stream_close(self:cdata()) then + self._HANDLE = nil + end +end + +-- open a compress stream +function lz4.compress_stream(opt) + local handle, errors = lz4._compress_stream_open() + if handle then + return _cstream.new(handle) + else + return nil, errors or "failed to open compress stream!" + end +end + +-- open a decompress stream +function lz4.decompress_stream(opt) + local handle, errors = lz4._decompress_stream_open() + if handle then + return _dstream.new(handle) + else + return nil, errors or "failed to open decompress stream!" + end +end -- compress frame data -- diff --git a/xmake/core/sandbox/modules/import/core/compress/lz4.lua b/xmake/core/sandbox/modules/import/core/compress/lz4.lua index 5287cc47f..c22ae43e1 100644 --- a/xmake/core/sandbox/modules/import/core/compress/lz4.lua +++ b/xmake/core/sandbox/modules/import/core/compress/lz4.lua @@ -77,5 +77,23 @@ function sandbox_core_compress_lz4.block_decompress(data, realsize, opt) return result end +-- new compress stream +function sandbox_core_compress_lz4.compress_stream(opt) + local result, errors = lz4.compress_stream(opt) + if not result and errors then + raise(errors) + end + return result +end + +-- new a decompress stream +function sandbox_core_compress_lz4.decompress_stream(opt) + local result, errors = lz4.decompress_stream(opt) + if not result and errors then + raise(errors) + end + return result +end + -- return module return sandbox_core_compress_lz4 |
