--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/python-zstandard/c-ext/dictparams.c Thu Nov 10 22:15:58 2016 -0800
@@ -0,0 +1,125 @@
+/**
+* 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.
+*/
+
+#include "python-zstandard.h"
+
+PyDoc_STRVAR(DictParameters__doc__,
+"DictParameters: low-level control over dictionary generation");
+
+static PyObject* DictParameters_new(PyTypeObject* subtype, PyObject* args, PyObject* kwargs) {
+ DictParametersObject* self;
+ unsigned selectivityLevel;
+ int compressionLevel;
+ unsigned notificationLevel;
+ unsigned dictID;
+
+ if (!PyArg_ParseTuple(args, "IiII", &selectivityLevel, &compressionLevel,
+ ¬ificationLevel, &dictID)) {
+ return NULL;
+ }
+
+ self = (DictParametersObject*)subtype->tp_alloc(subtype, 1);
+ if (!self) {
+ return NULL;
+ }
+
+ self->selectivityLevel = selectivityLevel;
+ self->compressionLevel = compressionLevel;
+ self->notificationLevel = notificationLevel;
+ self->dictID = dictID;
+
+ return (PyObject*)self;
+}
+
+static void DictParameters_dealloc(PyObject* self) {
+ PyObject_Del(self);
+}
+
+static Py_ssize_t DictParameters_length(PyObject* self) {
+ return 4;
+};
+
+static PyObject* DictParameters_item(PyObject* o, Py_ssize_t i) {
+ DictParametersObject* self = (DictParametersObject*)o;
+
+ switch (i) {
+ case 0:
+ return PyLong_FromLong(self->selectivityLevel);
+ case 1:
+ return PyLong_FromLong(self->compressionLevel);
+ case 2:
+ return PyLong_FromLong(self->notificationLevel);
+ case 3:
+ return PyLong_FromLong(self->dictID);
+ default:
+ PyErr_SetString(PyExc_IndexError, "index out of range");
+ return NULL;
+ }
+}
+
+static PySequenceMethods DictParameters_sq = {
+ DictParameters_length, /* sq_length */
+ 0, /* sq_concat */
+ 0, /* sq_repeat */
+ DictParameters_item, /* sq_item */
+ 0, /* sq_ass_item */
+ 0, /* sq_contains */
+ 0, /* sq_inplace_concat */
+ 0 /* sq_inplace_repeat */
+};
+
+PyTypeObject DictParametersType = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "DictParameters", /* tp_name */
+ sizeof(DictParametersObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)DictParameters_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ &DictParameters_sq, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ DictParameters__doc__, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ 0, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ DictParameters_new, /* tp_new */
+};
+
+void dictparams_module_init(PyObject* mod) {
+ Py_TYPE(&DictParametersType) = &PyType_Type;
+ if (PyType_Ready(&DictParametersType) < 0) {
+ return;
+ }
+
+ Py_IncRef((PyObject*)&DictParametersType);
+ PyModule_AddObject(mod, "DictParameters", (PyObject*)&DictParametersType);
+}