// qmap.sip generated by MetaSIP on Fri Sep 28 17:07:47 2007 // // This file is part of the QtCore Python extension module. // // Copyright (c) 2007 // Phil Thompson // // This file is part of PyQt. // // This copy of PyQt is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License version 2 as published by // the Free Software Foundation and appearing in the file LICENSE included in the // packaging of this file. // // PyQt is supplied in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along with // PyQt; see the file LICENSE. If not, write to the Free Software Foundation, // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // QMap is implemented as a Python dictionary. template %MappedType QMap { %TypeHeaderCode #include %End %ConvertFromTypeCode // Create the dictionary. PyObject *d = PyDict_New(); if (!d) return NULL; // Set the dictionary elements. QMap::const_iterator i = sipCpp->constBegin(); while (i != sipCpp->constEnd()) { TYPE1 *t1 = new TYPE1(i.key()); TYPE2 *t2 = new TYPE2(i.value()); PyObject *t1obj = sipConvertFromNewInstance(t1, sipClass_TYPE1, sipTransferObj); PyObject *t2obj = sipConvertFromNewInstance(t2, sipClass_TYPE2, sipTransferObj); if (t1obj == NULL || t2obj == NULL || PyDict_SetItem(d, t1obj, t2obj) < 0) { Py_DECREF(d); if (t1obj) Py_DECREF(t1obj); else delete t1; if (t2obj) Py_DECREF(t2obj); else delete t2; return NULL; } Py_DECREF(t1obj); Py_DECREF(t2obj); ++i; } return d; %End %ConvertToTypeCode PyObject *t1obj, *t2obj; #if PY_VERSION_HEX >= 0x02050000 Py_ssize_t i = 0; #else int i = 0; #endif // Check the type if that is all that is required. if (sipIsErr == NULL) { if (!PyDict_Check(sipPy)) return 0; while (PyDict_Next(sipPy, &i, &t1obj, &t2obj)) { if (!sipCanConvertToInstance(t1obj, sipClass_TYPE1, SIP_NOT_NONE)) return 0; if (!sipCanConvertToInstance(t2obj, sipClass_TYPE2, SIP_NOT_NONE)) return 0; } return 1; } QMap *qm = new QMap; while (PyDict_Next(sipPy, &i, &t1obj, &t2obj)) { int state1, state2; TYPE1 *t1 = reinterpret_cast(sipConvertToInstance(t1obj, sipClass_TYPE1, sipTransferObj, SIP_NOT_NONE, &state1, sipIsErr)); TYPE2 *t2 = reinterpret_cast(sipConvertToInstance(t2obj, sipClass_TYPE2, sipTransferObj, SIP_NOT_NONE, &state2, sipIsErr)); if (*sipIsErr) { sipReleaseInstance(t1, sipClass_TYPE1, state1); sipReleaseInstance(t2, sipClass_TYPE2, state2); delete qm; return 0; } qm->insert(*t1, *t2); sipReleaseInstance(t1, sipClass_TYPE1, state1); sipReleaseInstance(t2, sipClass_TYPE2, state2); } *sipCppPtr = qm; return sipGetState(sipTransferObj); %End }; // QMap is implemented as a Python dictionary. template %MappedType QMap { %TypeHeaderCode #include %End %ConvertFromTypeCode // Create the dictionary. PyObject *d = PyDict_New(); if (!d) return NULL; // Set the dictionary elements. QMap::const_iterator i = sipCpp->constBegin(); while (i != sipCpp->constEnd()) { TYPE *t = new TYPE(i.value()); PyObject *kobj = PyInt_FromLong(i.key()); PyObject *tobj = sipConvertFromNewInstance(t, sipClass_TYPE, sipTransferObj); if (kobj == NULL || tobj == NULL || PyDict_SetItem(d, kobj, tobj) < 0) { Py_DECREF(d); if (kobj) Py_DECREF(kobj); if (tobj) Py_DECREF(tobj); else delete t; return NULL; } Py_DECREF(kobj); Py_DECREF(tobj); ++i; } return d; %End %ConvertToTypeCode PyObject *kobj, *tobj; #if PY_VERSION_HEX >= 0x02050000 Py_ssize_t i = 0; #else int i = 0; #endif // Check the type if that is all that is required. if (sipIsErr == NULL) { if (!PyDict_Check(sipPy)) return 0; while (PyDict_Next(sipPy, &i, &kobj, &tobj)) if (!sipCanConvertToInstance(tobj, sipClass_TYPE, SIP_NOT_NONE)) return 0; return 1; } QMap *qm = new QMap; while (PyDict_Next(sipPy, &i, &kobj, &tobj)) { int state, k = PyInt_AsLong(kobj); TYPE *t = reinterpret_cast(sipConvertToInstance(tobj, sipClass_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); if (*sipIsErr) { sipReleaseInstance(t, sipClass_TYPE, state); delete qm; return 0; } qm->insert(k, *t); sipReleaseInstance(t, sipClass_TYPE, state); } *sipCppPtr = qm; return sipGetState(sipTransferObj); %End };