dictparams.c
141 lines
| 4.4 KiB
| text/x-c
|
CLexer
|
r30435 | /** | ||
* 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; | ||||
|
r30895 | if (!PyArg_ParseTuple(args, "IiII:DictParameters", | ||
&selectivityLevel, &compressionLevel, ¬ificationLevel, &dictID)) { | ||||
|
r30435 | 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); | ||||
} | ||||
|
r30895 | static PyMemberDef DictParameters_members[] = { | ||
{ "selectivity_level", T_UINT, | ||||
offsetof(DictParametersObject, selectivityLevel), READONLY, | ||||
"selectivity level" }, | ||||
{ "compression_level", T_INT, | ||||
offsetof(DictParametersObject, compressionLevel), READONLY, | ||||
"compression level" }, | ||||
{ "notification_level", T_UINT, | ||||
offsetof(DictParametersObject, notificationLevel), READONLY, | ||||
"notification level" }, | ||||
{ "dict_id", T_UINT, | ||||
offsetof(DictParametersObject, dictID), READONLY, | ||||
"dictionary ID" }, | ||||
{ NULL } | ||||
}; | ||||
|
r30435 | static Py_ssize_t DictParameters_length(PyObject* self) { | ||
return 4; | ||||
|
r30498 | } | ||
|
r30435 | |||
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 */ | ||||
|
r30895 | DictParameters_members, /* tp_members */ | ||
|
r30435 | 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); | ||||
} | ||||