Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Moved QMultiMap<int, TYPE2*> to conversion.sip
  • Loading branch information
elpaso committed Aug 7, 2015
1 parent 6bbc9d5 commit e48b6e8
Show file tree
Hide file tree
Showing 3 changed files with 126 additions and 150 deletions.
126 changes: 126 additions & 0 deletions python/core/conversions.sip
Expand Up @@ -14,6 +14,7 @@ which are not wrapped by PyQt:
- QMap<TYPE1, TYPE2*>
- QMap<double, TYPE>
- QMultiMap<double, TYPE2>
- QMultiMap<int, TYPE2>
- QMap<qint64, TYPE>
- QList< QPair< QString, QList<QString> > >
- QVector<TYPE*>
Expand Down Expand Up @@ -1407,6 +1408,131 @@ template<double, TYPE2>
%End
};


template<int, TYPE2*>
%MappedType QMultiMap<int, TYPE2*>
{
%TypeHeaderCode
#include <QMultiMap>
%End

%ConvertFromTypeCode
// Convert to Python: create the dictionary.
PyObject *d = PyDict_New();

if (!d)
{
return NULL;
}

// Set the dictionary elements.
QMultiMap<int, TYPE2*>::iterator i = sipCpp->begin();

while (i != sipCpp->end())
{

const int t1 = i.key();
TYPE2 * t2 = i.value();
PyObject *t1obj = PyInt_FromSize_t(t1);
PyObject *t2obj = sipConvertFromType(t2, sipType_TYPE2, sipTransferObj);
if (PyDict_GetItem(d, t1obj) == NULL)
{
PyObject *lst = PyList_New(0);
PyDict_SetItem(d, t1obj, lst);
if (lst)
{
Py_DECREF(lst);
}
}

if (t1obj == NULL || t2obj == NULL ||
PyList_Append(PyDict_GetItem(d, t1obj), t2obj) < 0)
{
Py_DECREF(d);
if (t1obj)
{
Py_DECREF(t1obj);
}

if (t2obj)
{
Py_DECREF(t2obj);
}

return NULL;
}
Py_DECREF(t1obj);
Py_DECREF(t2obj);

++i;
}

return d;
%End

%ConvertToTypeCode
// Convert from Python:
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))
{
for (int i = 0; i < PyList_GET_SIZE(t2obj); ++i) {
if (!sipCanConvertToType(PyList_GET_ITEM(t2obj, i),
sipType_TYPE2, SIP_NOT_NONE))
return 0;
}
}

return 1;
}

QMultiMap<int, TYPE2*> *qm = new QMultiMap<int, TYPE2*>;
while (PyDict_Next(sipPy, &i, &t1obj, &t2obj))
{
int state2;
int k = (int) PyInt_AsLong(t1obj);
for (int i = 0; i < PyList_GET_SIZE(t2obj); ++i)
{
TYPE2 *t2 =
reinterpret_cast<TYPE2 *>(sipConvertToType(PyList_GET_ITEM(t2obj, i),
sipType_TYPE2,
sipTransferObj,
SIP_NOT_NONE,
&state2,
sipIsErr));

if (*sipIsErr)
{
sipReleaseType(t2, sipType_TYPE2, state2);

delete qm;
return 0;
}

qm->insert(k, t2);

sipReleaseType(t2, sipType_TYPE2, state2);
}
}

*sipCppPtr = qm;

return sipGetState(sipTransferObj);
%End
};


%MappedType QList < QPair< QString, QList<QString> > >
{
%TypeHeaderCode
Expand Down
147 changes: 0 additions & 147 deletions python/server/conversions.sip

This file was deleted.

3 changes: 0 additions & 3 deletions python/server/server.sip
Expand Up @@ -7,9 +7,6 @@
%Import QtGui/QtGuimod.sip
%Import QtXml/QtXmlmod.sip


%Include conversions.sip

%Import core/core.sip

%Feature HAVE_SERVER_PYTHON_PLUGINS
Expand Down

0 comments on commit e48b6e8

Please sign in to comment.