diff options
| author | Antoine Pitrou <pitrou@free.fr> | 2018-04-07 18:14:03 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-07 18:14:03 +0200 |
| commit | 1d80a561734b9932961c546b0897405a3bfbf3e6 (patch) | |
| tree | 737793472ed6d3745d31fb56f2cb1f2b66429c69 /Doc/includes/sublist.c | |
| parent | b405752dab95fa5dc65a19d94e798844d0378c61 (diff) | |
| download | cpython-git-1d80a561734b9932961c546b0897405a3bfbf3e6.tar.gz | |
bpo-33201: Modernize "Extension types" doc (GH-6337)
* bpo-33201: Modernize "Extension types" doc
* Split tutorial and other topics
* Some small fixes
* Address some review comments
* Rename noddy* to custom* and shoddy to sublist
* Fix markup
Diffstat (limited to 'Doc/includes/sublist.c')
| -rw-r--r-- | Doc/includes/sublist.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/Doc/includes/sublist.c b/Doc/includes/sublist.c new file mode 100644 index 0000000000..376dddfac0 --- /dev/null +++ b/Doc/includes/sublist.c @@ -0,0 +1,63 @@ +#include <Python.h> + +typedef struct { + PyListObject list; + int state; +} SubListObject; + +static PyObject * +SubList_increment(SubListObject *self, PyObject *unused) +{ + self->state++; + return PyLong_FromLong(self->state); +} + +static PyMethodDef SubList_methods[] = { + {"increment", (PyCFunction) SubList_increment, METH_NOARGS, + PyDoc_STR("increment state counter")}, + {NULL}, +}; + +static int +SubList_init(SubListObject *self, PyObject *args, PyObject *kwds) +{ + if (PyList_Type.tp_init((PyObject *) self, args, kwds) < 0) + return -1; + self->state = 0; + return 0; +} + +static PyTypeObject SubListType = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "sublist.SubList", + .tp_doc = "SubList objects", + .tp_basicsize = sizeof(SubListObject), + .tp_itemsize = 0, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_init = (initproc) SubList_init, + .tp_methods = SubList_methods, +}; + +static PyModuleDef sublistmodule = { + PyModuleDef_HEAD_INIT, + .m_name = "sublist", + .m_doc = "Example module that creates an extension type.", + .m_size = -1, +}; + +PyMODINIT_FUNC +PyInit_sublist(void) +{ + PyObject *m; + SubListType.tp_base = &PyList_Type; + if (PyType_Ready(&SubListType) < 0) + return NULL; + + m = PyModule_Create(&sublistmodule); + if (m == NULL) + return NULL; + + Py_INCREF(&SubListType); + PyModule_AddObject(m, "SubList", (PyObject *) &SubListType); + return m; +} |
