#ifndef PYTHINGDESCRIPTOR_H #define PYTHINGDESCRIPTOR_H #include #include "structmember.h" #include "integrations/thingdescriptor.h" #include "loggingcategories.h" #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Winvalid-offsetof" #pragma GCC diagnostic ignored "-Wwrite-strings" typedef struct { PyObject_HEAD PyObject* pyThingClassId; PyObject* pyName; PyObject* pyDescription; } PyThingDescriptor; static PyMemberDef PyThingDescriptor_members[] = { {"thingClassId", T_OBJECT_EX, offsetof(PyThingDescriptor, pyThingClassId), 0, "Descriptor thingClassId"}, {"name", T_OBJECT_EX, offsetof(PyThingDescriptor, pyName), 0, "Descriptor name"}, {"description", T_OBJECT_EX, offsetof(PyThingDescriptor, pyDescription), 0, "Descriptor description"}, {nullptr, 0, 0, 0, nullptr} /* Sentinel */ }; static int PyThingDescriptor_init(PyThingDescriptor *self, PyObject *args, PyObject *kwds) { static char *kwlist[] = {"thingClassId", "name", "description", nullptr}; PyObject *thingClassId = nullptr, *name = nullptr, *description = nullptr; qWarning() << "++++ PyThingDescriptor"; if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOO", kwlist, &thingClassId, &name, &description)) return -1; if (thingClassId) { Py_XDECREF(self->pyThingClassId); Py_INCREF(thingClassId); self->pyThingClassId = thingClassId; } if (name) { Py_XDECREF(self->pyName); Py_INCREF(name); self->pyName = name; } if (description) { Py_XDECREF(self->pyDescription); Py_INCREF(description); self->pyDescription = description; } return 0; } static void PyThingDescriptor_dealloc(PyThingDescriptor * self) { qWarning() << "---- PyThingDescriptor"; Py_TYPE(self)->tp_free(self); } static PyTypeObject PyThingDescriptorType = { PyVarObject_HEAD_INIT(NULL, 0) "nymea.ThingDescriptor", /* tp_name */ sizeof(PyThingDescriptor), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)PyThingDescriptor_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 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, /* tp_flags */ "ThingDescriptor", /* tp_doc */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; static void registerThingDescriptorType(PyObject *module) { PyThingDescriptorType.tp_new = PyType_GenericNew; PyThingDescriptorType.tp_members = PyThingDescriptor_members; PyThingDescriptorType.tp_init = reinterpret_cast(PyThingDescriptor_init); if (PyType_Ready(&PyThingDescriptorType) < 0) { return; } PyModule_AddObject(module, "ThingDescriptor", reinterpret_cast(&PyThingDescriptorType)); } #pragma GCC diagnostic pop #endif // PYTHINGDESCRIPTOR_H