libs-imp-zstd.lmt /size: 3103 b    last modification: 2021-10-28 13:51
1if not modules then modules = { } end modules ['libs-imp-zstd'] = {
2    version   = 1.001,
3    comment   = "companion to luat-lib.mkxl",
4    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
5    copyright = "PRAGMA ADE / ConTeXt Development Team",
6    license   = "see context related readme files"
7}
8
9-- Instead of linking in libs like this we now do them optional. After all, once
10-- we start adding more and more stuff statically we en dup with a mess. In fact,
11-- this lib was the reason for no longer embedding lzo and lz4.
12
13-- c:/data/develop/tex-context/tex/texmf-win64/bin/lib/luametatex/lua/copies/curl/libzstd.dll
14
15-- require("libs-imp-zstd.lmt") -- only loads
16--
17-- local zstd = require("zstd") -- activates
18--
19-- local data = io.loaddata("t:/sources/char-def.lua")
20-- local comp = zstd.compress  (data)
21-- local back = zstd.decompress(comp)
22--
23-- print(#data,#comp,#back,#back==#data)
24
25local libname = "zstd"
26local libfile = "libzstd"
27
28local zstdlib = resolvers.libraries.validoptional(libname)
29
30if not zstdlib then return end
31
32local zstd_compress   = zstdlib.compress
33local zstd_decompress = zstdlib.decompress
34
35local function okay()
36    if resolvers.libraries.optionalloaded(libname,libfile) then
37        okay = function() return true end
38    else
39        okay = function() return false end
40    end
41    return okay()
42end
43
44local zstd = {
45    compress   = function (s) return okay() and zstd_compress  (s) end,
46    decompress = function (s) return okay() and zstd_decompress(s) end,
47}
48
49package.loaded[libname] = zstd
50
51return zstd
52
53-- local foreign   = optional.loaded.foreign
54-- local newbuffer = foreign.newbuffer
55-- local getbuffer = foreign.getbuffer
56--
57-- local zstd = foreign.load("libzstd")
58--
59-- local ZSTD_compressBound = zstd:register {
60--     name      = "ZSTD_compressBound",
61--     result    = "int",
62--     arguments = { "int" },
63-- }
64--
65-- local ZSTD_getFrameContentSize = zstd:register {
66--     name      = "ZSTD_getFrameContentSize",
67--     result    = "int",
68--     arguments = { "pointer", "int" },
69-- }
70--
71-- local ZSTD_compress = zstd:register {
72--     name      = "ZSTD_compress",
73--     result    = "int",
74--     arguments = { "pointer", "int", "string", "int", "int" },
75--     arguments = { "pointer", "int", "pointer", "int", "int" },
76-- }
77--
78-- local ZSTD_decompress = zstd:register {
79--     name      = "ZSTD_decompress",
80--     result    = "int",
81--     arguments = { "pointer", "int", "string", "int" },
82-- }
83--
84-- local function zstd_compress(source,level)
85--     local sourcesize = #source
86--     local targetsize = ZSTD_compressBound(sourcesize)
87--     local target     = newbuffer(targetsize)
88--     local result     = ZSTD_compress(target,targetsize,source,sourcesize,tonumber(level) or 3)
89--     return getbuffer(target,result)
90-- end
91--
92-- local function zstd_decompress(source)
93--     local sourcesize = #source
94--     local targetsize = ZSTD_getFrameContentSize(source,sourcesize)
95--     local target     = newbuffer(targetsize)
96--     local result     = ZSTD_decompress(target,targetsize,source,sourcesize)
97--     return getbuffer(target,result)
98-- end
99