--- 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);
}