| #include <Python.h> | |
| typedef struct { | |
| PyListObject list; | |
| int state; | |
| } Shoddy; | |
| static PyObject * | |
| Shoddy_increment(Shoddy *self, PyObject *unused) | |
| { | |
| self->state++; | |
| return PyInt_FromLong(self->state); | |
| } | |
| static PyMethodDef Shoddy_methods[] = { | |
| {"increment", (PyCFunction)Shoddy_increment, METH_NOARGS, | |
| PyDoc_STR("increment state counter")}, | |
| {NULL, NULL}, | |
| }; | |
| static int | |
| Shoddy_init(Shoddy *self, PyObject *args, PyObject *kwds) | |
| { | |
| if (PyList_Type.tp_init((PyObject *)self, args, kwds) < 0) | |
| return -1; | |
| self->state = 0; | |
| return 0; | |
| } | |
| static PyTypeObject ShoddyType = { | |
| PyVarObject_HEAD_INIT(NULL, 0) | |
| "shoddy.Shoddy", /* tp_name */ | |
| sizeof(Shoddy), /* tp_basicsize */ | |
| 0, /* tp_itemsize */ | |
| 0, /* tp_dealloc */ | |
| 0, /* tp_print */ | |
| 0, /* tp_getattr */ | |
| 0, /* tp_setattr */ | |
| 0, /* tp_compare */ | |
| 0, /* tp_repr */ | |
| 0, /* tp_as_number */ | |
| 0, /* 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 | | |
| Py_TPFLAGS_BASETYPE, /* tp_flags */ | |
| 0, /* tp_doc */ | |
| 0, /* tp_traverse */ | |
| 0, /* tp_clear */ | |
| 0, /* tp_richcompare */ | |
| 0, /* tp_weaklistoffset */ | |
| 0, /* tp_iter */ | |
| 0, /* tp_iternext */ | |
| Shoddy_methods, /* 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 */ | |
| (initproc)Shoddy_init, /* tp_init */ | |
| 0, /* tp_alloc */ | |
| 0, /* tp_new */ | |
| }; | |
| PyMODINIT_FUNC | |
| initshoddy(void) | |
| { | |
| PyObject *m; | |
| ShoddyType.tp_base = &PyList_Type; | |
| if (PyType_Ready(&ShoddyType) < 0) | |
| return; | |
| m = Py_InitModule3("shoddy", NULL, "Shoddy module"); | |
| if (m == NULL) | |
| return; | |
| Py_INCREF(&ShoddyType); | |
| PyModule_AddObject(m, "Shoddy", (PyObject *) &ShoddyType); | |
| } |