91 lines · 2.7 KB · C
RawDownload
#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 intShoddy_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 = {    PyObject_HEAD_INIT(NULL)    0,                       /* ob_size */    "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_FUNCinitshoddy(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);}