// Get the cache for a set of bindings. static qpyopengl_dataCache *get_cache(PyObject *bindings) { // Create the cache if it doesn't already exist. qpyopengl_dataCache *data_cache = (qpyopengl_dataCache *)sipGetUserObject((sipSimpleWrapper *)bindings); if (!data_cache) { data_cache = qpyopengl_dataCache_New(); if (data_cache) sipSetUserObject((sipSimpleWrapper *)bindings, (PyObject *)data_cache); } return data_cache; }
// Return a wrapped QGenericReturnArgument for the given type. PyObject *qpycore_ReturnFactory(PyObject *type) { PyObject *as_obj = ArgumentStorage_New(type, 0); if (!as_obj) { Chimera::raiseParseException(type, "a Q_RETURN_ARG()"); return 0; } #if defined(SIP_USE_PYCAPSULE) Chimera::Storage *st = reinterpret_cast<Chimera::Storage *>( PyCapsule_GetPointer(as_obj, NULL)); #else Chimera::Storage *st = reinterpret_cast<Chimera::Storage *>( PyCObject_AsVoidPtr(as_obj)); #endif QGenericReturnArgument *arg = new QGenericReturnArgument( st->type()->name().constData(), st->address()); PyObject *gra_obj = sipConvertFromNewType(arg, sipType_QGenericReturnArgument, 0); if (gra_obj) { // Stash the storage in the user field so that everything will be // properly garbage collected. sipSetUserObject((sipSimpleWrapper *)gra_obj, as_obj); } else { delete arg; Py_DECREF(as_obj); } return gra_obj; }