/** * Copyright (c) 2016-present, Gregory Szorc * All rights reserved. * * This software may be modified and distributed under the terms * of the BSD license. See the LICENSE file for details. */ #define PY_SSIZE_T_CLEAN #include #define ZSTD_STATIC_LINKING_ONLY #define ZDICT_STATIC_LINKING_ONLY #include "mem.h" #include "zstd.h" #include "zdict.h" #define PYTHON_ZSTANDARD_VERSION "0.6.0" typedef enum { compressorobj_flush_finish, compressorobj_flush_block, } CompressorObj_Flush; typedef struct { PyObject_HEAD unsigned windowLog; unsigned chainLog; unsigned hashLog; unsigned searchLog; unsigned searchLength; unsigned targetLength; ZSTD_strategy strategy; } CompressionParametersObject; extern PyTypeObject CompressionParametersType; typedef struct { PyObject_HEAD unsigned selectivityLevel; int compressionLevel; unsigned notificationLevel; unsigned dictID; } DictParametersObject; extern PyTypeObject DictParametersType; typedef struct { PyObject_HEAD void* dictData; size_t dictSize; } ZstdCompressionDict; extern PyTypeObject ZstdCompressionDictType; typedef struct { PyObject_HEAD int compressionLevel; ZstdCompressionDict* dict; ZSTD_CCtx* cctx; ZSTD_CDict* cdict; CompressionParametersObject* cparams; ZSTD_frameParameters fparams; } ZstdCompressor; extern PyTypeObject ZstdCompressorType; typedef struct { PyObject_HEAD ZstdCompressor* compressor; ZSTD_CStream* cstream; ZSTD_outBuffer output; int finished; } ZstdCompressionObj; extern PyTypeObject ZstdCompressionObjType; typedef struct { PyObject_HEAD ZstdCompressor* compressor; PyObject* writer; Py_ssize_t sourceSize; size_t outSize; ZSTD_CStream* cstream; int entered; } ZstdCompressionWriter; extern PyTypeObject ZstdCompressionWriterType; typedef struct { PyObject_HEAD ZstdCompressor* compressor; PyObject* reader; Py_buffer* buffer; Py_ssize_t bufferOffset; Py_ssize_t sourceSize; size_t inSize; size_t outSize; ZSTD_CStream* cstream; ZSTD_inBuffer input; ZSTD_outBuffer output; int finishedOutput; int finishedInput; PyObject* readResult; } ZstdCompressorIterator; extern PyTypeObject ZstdCompressorIteratorType; typedef struct { PyObject_HEAD ZSTD_DCtx* refdctx; ZstdCompressionDict* dict; ZSTD_DDict* ddict; } ZstdDecompressor; extern PyTypeObject ZstdDecompressorType; typedef struct { PyObject_HEAD ZstdDecompressor* decompressor; ZSTD_DStream* dstream; int finished; } ZstdDecompressionObj; extern PyTypeObject ZstdDecompressionObjType; typedef struct { PyObject_HEAD ZstdDecompressor* decompressor; PyObject* writer; size_t outSize; ZSTD_DStream* dstream; int entered; } ZstdDecompressionWriter; extern PyTypeObject ZstdDecompressionWriterType; typedef struct { PyObject_HEAD ZstdDecompressor* decompressor; PyObject* reader; Py_buffer* buffer; Py_ssize_t bufferOffset; size_t inSize; size_t outSize; size_t skipBytes; ZSTD_DStream* dstream; ZSTD_inBuffer input; ZSTD_outBuffer output; Py_ssize_t readCount; int finishedInput; int finishedOutput; } ZstdDecompressorIterator; extern PyTypeObject ZstdDecompressorIteratorType; typedef struct { int errored; PyObject* chunk; } DecompressorIteratorResult; void ztopy_compression_parameters(CompressionParametersObject* params, ZSTD_compressionParameters* zparams); CompressionParametersObject* get_compression_parameters(PyObject* self, PyObject* args); PyObject* estimate_compression_context_size(PyObject* self, PyObject* args); ZSTD_CStream* CStream_from_ZstdCompressor(ZstdCompressor* compressor, Py_ssize_t sourceSize); ZSTD_DStream* DStream_from_ZstdDecompressor(ZstdDecompressor* decompressor); ZstdCompressionDict* train_dictionary(PyObject* self, PyObject* args, PyObject* kwargs);