Skip to content

Commit d3049ca

Browse files
committed
Adapt zstd.pyx streaming for Py_buffer
1 parent ccddf41 commit d3049ca

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

numcodecs/zstd.pyx

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
from cpython.bytes cimport PyBytes_AS_STRING, PyBytes_FromStringAndSize
99
from cpython.memoryview cimport PyMemoryView_GET_BUFFER
1010

11-
from .compat_ext cimport Buffer
12-
from .compat_ext import Buffer
1311
from .compat_ext cimport PyBytes_RESIZE, ensure_continguous_memoryview
1412

1513
from .compat import ensure_contiguous_ndarray
@@ -222,23 +220,24 @@ def decompress(source, dest=None):
222220
raise RuntimeError('Zstd decompression error: invalid input data')
223221

224222
if dest_size == ZSTD_CONTENTSIZE_UNKNOWN and dest is None:
225-
return stream_decompress(source_buffer)
223+
return stream_decompress(source_pb)
226224

227225
# setup destination buffer
228226
if dest is None:
229227
# allocate memory
230228
dest_1d = dest = PyBytes_FromStringAndSize(NULL, dest_size)
231229
else:
232230
dest_1d = ensure_contiguous_ndarray(dest)
233-
if dest_size == ZSTD_CONTENTSIZE_UNKNOWN:
234-
dest_size = dest_buffer.nbytes
235231

236232
# obtain dest memoryview
237233
dest_mv = memoryview(dest_1d)
238234
dest_pb = PyMemoryView_GET_BUFFER(dest_mv)
239235
dest_ptr = <char*>dest_pb.buf
240236
dest_nbytes = dest_pb.len
241237

238+
if dest_size == ZSTD_CONTENTSIZE_UNKNOWN:
239+
dest_size = dest_nbytes
240+
242241
# validate output buffer
243242
if dest_nbytes < dest_size:
244243
raise ValueError('destination buffer too small; expected at least %s, '
@@ -261,12 +260,12 @@ def decompress(source, dest=None):
261260

262261
return dest
263262

264-
cdef stream_decompress(Buffer source_buffer):
263+
cdef stream_decompress(const Py_buffer* source_pb):
265264
"""Decompress data of unknown size
266265
267266
Parameters
268267
----------
269-
source : Buffer
268+
source : Py_buffer
270269
Compressed data buffer
271270
272271
Returns
@@ -276,10 +275,9 @@ cdef stream_decompress(Buffer source_buffer):
276275
"""
277276

278277
cdef:
279-
char *source_ptr
278+
const char *source_ptr
280279
void *dest_ptr
281280
void *new_dst
282-
Buffer dest_buffer = None
283281
size_t source_size, dest_size, decompressed_size
284282
size_t DEST_GROWTH_SIZE, status
285283
ZSTD_inBuffer input
@@ -290,8 +288,8 @@ cdef stream_decompress(Buffer source_buffer):
290288
# one completely block in all circumstances
291289
DEST_GROWTH_SIZE = ZSTD_DStreamOutSize();
292290

293-
source_ptr = source_buffer.ptr
294-
source_size = source_buffer.nbytes
291+
source_ptr = <const char*>source_pb.buf
292+
source_size = source_pb.len
295293

296294
# unknown content size, guess it is twice the size as the source
297295
dest_size = source_size * 2

0 commit comments

Comments
 (0)