| #define PY_SSIZE_T_CLEAN | |
| #include <Python.h> | |
| typedef struct { | |
| PyObject_HEAD | |
| /* Type-specific fields go here. */ | |
| } CustomObject; | |
| static PyTypeObject CustomType = { | |
| PyVarObject_HEAD_INIT(NULL, 0) | |
| .tp_name = "custom.Custom", | |
| .tp_doc = "Custom objects", | |
| .tp_basicsize = sizeof(CustomObject), | |
| .tp_itemsize = 0, | |
| .tp_flags = Py_TPFLAGS_DEFAULT, | |
| .tp_new = PyType_GenericNew, | |
| }; | |
| static PyModuleDef custommodule = { | |
| PyModuleDef_HEAD_INIT, | |
| .m_name = "custom", | |
| .m_doc = "Example module that creates an extension type.", | |
| .m_size = -1, | |
| }; | |
| PyMODINIT_FUNC | |
| PyInit_custom(void) | |
| { | |
| PyObject *m; | |
| if (PyType_Ready(&CustomType) < 0) | |
| return NULL; | |
| m = PyModule_Create(&custommodule); | |
| if (m == NULL) | |
| return NULL; | |
| Py_INCREF(&CustomType); | |
| if (PyModule_AddObject(m, "Custom", (PyObject *) &CustomType) < 0) { | |
| Py_DECREF(&CustomType); | |
| Py_DECREF(m); | |
| return NULL; | |
| } | |
| return m; | |
| } |