diff -r 2b130e26c3a4 -r e0dc40530c5a contrib/python-zstandard/c-ext/compressionparams.c --- 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); }