Skip to content

Commit 21c7aa1

Browse files
authored
Merge pull request #29 from mkitti/LibZstd
LibZstd Clang.jl generated bindings
2 parents 39470d1 + ca42fe4 commit 21c7aa1

File tree

10 files changed

+1432
-36
lines changed

10 files changed

+1432
-36
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@
55
/deps/build.log
66
/deps/deps.jl
77
/deps/usr/
8+
src/libzstd/LibTemplate.jl
9+
src/libzstd/ctypes.jl

Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ authors = ["Kenta Sato <bicycle1885@gmail.com>"]
55
version = "0.7.0"
66

77
[deps]
8+
CEnum = "fa961155-64e5-5f13-b03f-caf6b980ea82"
89
TranscodingStreams = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
910
Zstd_jll = "3161d3a3-bdf6-5164-811a-617609db77b4"
1011

src/CodecZstd.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import TranscodingStreams:
1717

1818
using Zstd_jll
1919

20+
include(joinpath("libzstd","LibZstd.jl"))
2021
include("libzstd.jl")
2122
include("compression.jl")
2223
include("decompression.jl")

src/libzstd.jl

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,24 @@
22
# ====================
33

44
function iserror(code::Csize_t)
5-
return ccall((:ZSTD_isError, libzstd), Cuint, (Csize_t,), code) != 0
5+
return LibZstd.ZSTD_isError(code) != 0
66
end
77

88
function zstderror(stream, code::Csize_t)
9-
ptr = ccall((:ZSTD_getErrorName, libzstd), Cstring, (Csize_t,), code)
9+
ptr = LibZstd.ZSTD_getErrorName(code)
1010
error("zstd error: ", unsafe_string(ptr))
1111
end
1212

1313
function max_clevel()
14-
return ccall((:ZSTD_maxCLevel, libzstd), Cint, ())
14+
return LibZstd.ZSTD_maxCLevel()
1515
end
1616

1717
const MAX_CLEVEL = max_clevel()
1818

19-
# ZSTD_outBuffer
20-
mutable struct InBuffer
21-
src::Ptr{Cvoid}
22-
size::Csize_t
23-
pos::Csize_t
24-
25-
function InBuffer()
26-
return new(C_NULL, 0, 0)
27-
end
28-
end
29-
30-
# ZSTD_inBuffer
31-
mutable struct OutBuffer
32-
dst::Ptr{Cvoid}
33-
size::Csize_t
34-
pos::Csize_t
35-
36-
function OutBuffer()
37-
return new(C_NULL, 0, 0)
38-
end
39-
end
19+
const InBuffer = LibZstd.ZSTD_inBuffer
20+
InBuffer() = InBuffer(C_NULL, 0, 0)
21+
const OutBuffer = LibZstd.ZSTD_outBuffer
22+
OutBuffer() = OutBuffer(C_NULL, 0, 0)
4023

4124
# ZSTD_CStream
4225
mutable struct CStream
@@ -45,7 +28,7 @@ mutable struct CStream
4528
obuffer::OutBuffer
4629

4730
function CStream()
48-
ptr = ccall((:ZSTD_createCStream, libzstd), Ptr{Cvoid}, ())
31+
ptr = LibZstd.ZSTD_createCStream()
4932
if ptr == C_NULL
5033
throw(OutOfMemoryError())
5134
end
@@ -54,23 +37,38 @@ mutable struct CStream
5437
end
5538

5639
function initialize!(cstream::CStream, level::Integer)
57-
return ccall((:ZSTD_initCStream, libzstd), Csize_t, (Ptr{Cvoid}, Cint), cstream.ptr, level)
40+
return LibZstd.ZSTD_initCStream(cstream.ptr, level)
5841
end
5942

6043
function reset!(cstream::CStream, srcsize::Integer)
61-
return ccall((:ZSTD_resetCStream, libzstd), Csize_t, (Ptr{Cvoid}, Culonglong), cstream.ptr, srcsize)
44+
# ZSTD_resetCStream is deprecated
45+
# https://github.com/facebook/zstd/blob/9d2a45a705e22ad4817b41442949cd0f78597154/lib/zstd.h#L2253-L2272
46+
res = LibZstd.ZSTD_CCtx_reset(cstream.ptr, LibZstd.ZSTD_reset_session_only)
47+
if iserror(res)
48+
return res
49+
end
50+
if srcsize == 0
51+
# From zstd.h:
52+
# Note: ZSTD_resetCStream() interprets pledgedSrcSize == 0 as ZSTD_CONTENTSIZE_UNKNOWN, but
53+
# ZSTD_CCtx_setPledgedSrcSize() does not do the same, so ZSTD_CONTENTSIZE_UNKNOWN must be
54+
# explicitly specified.
55+
srcsize = ZSTD_CONTENTSIZE_UNKNOWN
56+
end
57+
return LibZstd.ZSTD_CCtx_setPledgedSrcSize(cstream.ptr, srcsize)
58+
#return ccall((:ZSTD_resetCStream, libzstd), Csize_t, (Ptr{Cvoid}, Culonglong), cstream.ptr, srcsize)
59+
6260
end
6361

6462
function compress!(cstream::CStream)
65-
return ccall((:ZSTD_compressStream, libzstd), Csize_t, (Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}), cstream.ptr, pointer_from_objref(cstream.obuffer), pointer_from_objref(cstream.ibuffer))
63+
return LibZstd.ZSTD_compressStream(cstream.ptr, pointer_from_objref(cstream.obuffer), pointer_from_objref(cstream.ibuffer))
6664
end
6765

6866
function finish!(cstream::CStream)
69-
return ccall((:ZSTD_endStream, libzstd), Csize_t, (Ptr{Cvoid}, Ptr{Cvoid}), cstream.ptr, pointer_from_objref(cstream.obuffer))
67+
return LibZstd.ZSTD_endStream(cstream.ptr, pointer_from_objref(cstream.obuffer))
7068
end
7169

7270
function free!(cstream::CStream)
73-
return ccall((:ZSTD_freeCStream, libzstd), Csize_t, (Ptr{Cvoid},), cstream.ptr)
71+
return LibZstd.ZSTD_freeCStream(cstream.ptr)
7472
end
7573

7674
# ZSTD_DStream
@@ -80,7 +78,7 @@ mutable struct DStream
8078
obuffer::OutBuffer
8179

8280
function DStream()
83-
ptr = ccall((:ZSTD_createDStream, libzstd), Ptr{Cvoid}, ())
81+
ptr = LibZstd.ZSTD_createDStream()
8482
if ptr == C_NULL
8583
throw(OutOfMemoryError())
8684
end
@@ -89,19 +87,21 @@ mutable struct DStream
8987
end
9088

9189
function initialize!(dstream::DStream)
92-
return ccall((:ZSTD_initDStream, libzstd), Csize_t, (Ptr{Cvoid},), dstream.ptr)
90+
return LibZstd.ZSTD_initDStream(dstream.ptr)
9391
end
9492

9593
function reset!(dstream::DStream)
96-
return ccall((:ZSTD_resetDStream, libzstd), Csize_t, (Ptr{Cvoid},), dstream.ptr)
94+
# LibZstd.ZSTD_resetDStream is deprecated
95+
# https://github.com/facebook/zstd/blob/9d2a45a705e22ad4817b41442949cd0f78597154/lib/zstd.h#L2332-L2339
96+
return LibZstd.ZSTD_DCtx_reset(dstream.ptr, LibZstd.ZSTD_reset_session_only)
9797
end
9898

9999
function decompress!(dstream::DStream)
100-
return ccall((:ZSTD_decompressStream, libzstd), Csize_t, (Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}), dstream.ptr, pointer_from_objref(dstream.obuffer), pointer_from_objref(dstream.ibuffer))
100+
return LibZstd.ZSTD_decompressStream(dstream.ptr, pointer_from_objref(dstream.obuffer), pointer_from_objref(dstream.ibuffer))
101101
end
102102

103103
function free!(dstream::DStream)
104-
return ccall((:ZSTD_freeDStream, libzstd), Csize_t, (Ptr{Cvoid},), dstream.ptr)
104+
return LibZstd.ZSTD_freeDStream(dstream.ptr)
105105
end
106106

107107

@@ -112,5 +112,5 @@ const ZSTD_CONTENTSIZE_UNKNOWN = Culonglong(0) - 1
112112
const ZSTD_CONTENTSIZE_ERROR = Culonglong(0) - 2
113113

114114
function find_decompressed_size(src::Ptr, size::Integer)
115-
return ccall((:ZSTD_findDecompressedSize, libzstd), Culonglong, (Ptr{Cvoid}, Csize_t), src, size)
115+
return LibZstd.ZSTD_findDecompressedSize(src, size)
116116
end

0 commit comments

Comments
 (0)