Mercurial > public > mercurial-scm > hg
diff contrib/python-zstandard/c-ext/compressionparams.c @ 31796:e0dc40530c5a
zstd: vendor python-zstandard 0.8.0
Commit 81e1f5bbf1fc54808649562d3ed829730765c540 from
https://github.com/indygreg/python-zstandard is imported without
modifications (other than removing unwanted files).
Updates relevant to Mercurial include:
* Support for multi-threaded compression (we can use this for
bundle and wire protocol compression).
* APIs for batch compression and decompression operations using
multiple threads and optimal memory allocation mechanism. (Can
be useful for revlog perf improvements.)
* A ``BufferWithSegments`` type that models a single memory buffer
containing N discrete items of known lengths. This type can be
used for very efficient 0-copy data operations.
# no-check-commit
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 01 Apr 2017 15:24:03 -0700 |
parents | c32454d69b85 |
children | b1fb341d8a61 |
line wrap: on
line diff
--- a/contrib/python-zstandard/c-ext/compressionparams.c Sat Apr 01 13:43:52 2017 -0700 +++ b/contrib/python-zstandard/c-ext/compressionparams.c Sat Apr 01 15:24:03 2017 -0700 @@ -67,6 +67,8 @@ unsigned searchLength; unsigned targetLength; unsigned strategy; + ZSTD_compressionParameters params; + size_t zresult; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "IIIIIII:CompressionParameters", kwlist, &windowLog, &chainLog, &hashLog, &searchLog, &searchLength, @@ -117,9 +119,30 @@ self->targetLength = targetLength; self->strategy = strategy; + ztopy_compression_parameters(self, ¶ms); + zresult = ZSTD_checkCParams(params); + + if (ZSTD_isError(zresult)) { + PyErr_Format(PyExc_ValueError, "invalid compression parameters: %s", + ZSTD_getErrorName(zresult)); + return -1; + } + return 0; } +PyDoc_STRVAR(CompressionParameters_estimated_compression_context_size__doc__, +"Estimate the size in bytes of a compression context for compression parameters\n" +); + +PyObject* CompressionParameters_estimated_compression_context_size(CompressionParametersObject* self) { + ZSTD_compressionParameters params; + + ztopy_compression_parameters(self, ¶ms); + + return PyLong_FromSize_t(ZSTD_estimateCCtxSize(params)); +} + PyObject* estimate_compression_context_size(PyObject* self, PyObject* args) { CompressionParametersObject* params; ZSTD_compressionParameters zparams; @@ -142,6 +165,16 @@ PyObject_Del(self); } +static PyMethodDef CompressionParameters_methods[] = { + { + "estimated_compression_context_size", + (PyCFunction)CompressionParameters_estimated_compression_context_size, + METH_NOARGS, + CompressionParameters_estimated_compression_context_size__doc__ + }, + { NULL, NULL } +}; + static PyMemberDef CompressionParameters_members[] = { { "window_log", T_UINT, offsetof(CompressionParametersObject, windowLog), READONLY, @@ -195,7 +228,7 @@ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ - 0, /* tp_methods */ + CompressionParameters_methods, /* tp_methods */ CompressionParameters_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ @@ -214,7 +247,7 @@ return; } - Py_IncRef((PyObject*)&CompressionParametersType); + Py_INCREF(&CompressionParametersType); PyModule_AddObject(mod, "CompressionParameters", (PyObject*)&CompressionParametersType); }