1 /** |
|
2 * Copyright (c) 2016-present, Gregory Szorc |
|
3 * All rights reserved. |
|
4 * |
|
5 * This software may be modified and distributed under the terms |
|
6 * of the BSD license. See the LICENSE file for details. |
|
7 */ |
|
8 |
|
9 #include "python-zstandard.h" |
|
10 |
|
11 PyDoc_STRVAR(DictParameters__doc__, |
|
12 "DictParameters: low-level control over dictionary generation"); |
|
13 |
|
14 static PyObject* DictParameters_new(PyTypeObject* subtype, PyObject* args, PyObject* kwargs) { |
|
15 DictParametersObject* self; |
|
16 unsigned selectivityLevel; |
|
17 int compressionLevel; |
|
18 unsigned notificationLevel; |
|
19 unsigned dictID; |
|
20 |
|
21 if (!PyArg_ParseTuple(args, "IiII", &selectivityLevel, &compressionLevel, |
|
22 ¬ificationLevel, &dictID)) { |
|
23 return NULL; |
|
24 } |
|
25 |
|
26 self = (DictParametersObject*)subtype->tp_alloc(subtype, 1); |
|
27 if (!self) { |
|
28 return NULL; |
|
29 } |
|
30 |
|
31 self->selectivityLevel = selectivityLevel; |
|
32 self->compressionLevel = compressionLevel; |
|
33 self->notificationLevel = notificationLevel; |
|
34 self->dictID = dictID; |
|
35 |
|
36 return (PyObject*)self; |
|
37 } |
|
38 |
|
39 static void DictParameters_dealloc(PyObject* self) { |
|
40 PyObject_Del(self); |
|
41 } |
|
42 |
|
43 static Py_ssize_t DictParameters_length(PyObject* self) { |
|
44 return 4; |
|
45 } |
|
46 |
|
47 static PyObject* DictParameters_item(PyObject* o, Py_ssize_t i) { |
|
48 DictParametersObject* self = (DictParametersObject*)o; |
|
49 |
|
50 switch (i) { |
|
51 case 0: |
|
52 return PyLong_FromLong(self->selectivityLevel); |
|
53 case 1: |
|
54 return PyLong_FromLong(self->compressionLevel); |
|
55 case 2: |
|
56 return PyLong_FromLong(self->notificationLevel); |
|
57 case 3: |
|
58 return PyLong_FromLong(self->dictID); |
|
59 default: |
|
60 PyErr_SetString(PyExc_IndexError, "index out of range"); |
|
61 return NULL; |
|
62 } |
|
63 } |
|
64 |
|
65 static PySequenceMethods DictParameters_sq = { |
|
66 DictParameters_length, /* sq_length */ |
|
67 0, /* sq_concat */ |
|
68 0, /* sq_repeat */ |
|
69 DictParameters_item, /* sq_item */ |
|
70 0, /* sq_ass_item */ |
|
71 0, /* sq_contains */ |
|
72 0, /* sq_inplace_concat */ |
|
73 0 /* sq_inplace_repeat */ |
|
74 }; |
|
75 |
|
76 PyTypeObject DictParametersType = { |
|
77 PyVarObject_HEAD_INIT(NULL, 0) |
|
78 "DictParameters", /* tp_name */ |
|
79 sizeof(DictParametersObject), /* tp_basicsize */ |
|
80 0, /* tp_itemsize */ |
|
81 (destructor)DictParameters_dealloc, /* tp_dealloc */ |
|
82 0, /* tp_print */ |
|
83 0, /* tp_getattr */ |
|
84 0, /* tp_setattr */ |
|
85 0, /* tp_compare */ |
|
86 0, /* tp_repr */ |
|
87 0, /* tp_as_number */ |
|
88 &DictParameters_sq, /* tp_as_sequence */ |
|
89 0, /* tp_as_mapping */ |
|
90 0, /* tp_hash */ |
|
91 0, /* tp_call */ |
|
92 0, /* tp_str */ |
|
93 0, /* tp_getattro */ |
|
94 0, /* tp_setattro */ |
|
95 0, /* tp_as_buffer */ |
|
96 Py_TPFLAGS_DEFAULT, /* tp_flags */ |
|
97 DictParameters__doc__, /* tp_doc */ |
|
98 0, /* tp_traverse */ |
|
99 0, /* tp_clear */ |
|
100 0, /* tp_richcompare */ |
|
101 0, /* tp_weaklistoffset */ |
|
102 0, /* tp_iter */ |
|
103 0, /* tp_iternext */ |
|
104 0, /* tp_methods */ |
|
105 0, /* tp_members */ |
|
106 0, /* tp_getset */ |
|
107 0, /* tp_base */ |
|
108 0, /* tp_dict */ |
|
109 0, /* tp_descr_get */ |
|
110 0, /* tp_descr_set */ |
|
111 0, /* tp_dictoffset */ |
|
112 0, /* tp_init */ |
|
113 0, /* tp_alloc */ |
|
114 DictParameters_new, /* tp_new */ |
|
115 }; |
|
116 |
|
117 void dictparams_module_init(PyObject* mod) { |
|
118 Py_TYPE(&DictParametersType) = &PyType_Type; |
|
119 if (PyType_Ready(&DictParametersType) < 0) { |
|
120 return; |
|
121 } |
|
122 |
|
123 Py_IncRef((PyObject*)&DictParametersType); |
|
124 PyModule_AddObject(mod, "DictParameters", (PyObject*)&DictParametersType); |
|
125 } |
|