Skip to content

Commit 94ab29b

Browse files
author
jef
committed
different fix for #1942
git-svn-id: http://svn.osgeo.org/qgis/trunk@11780 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent c9d8b0f commit 94ab29b

1 file changed

Lines changed: 76 additions & 40 deletions

File tree

‎python/core/conversions.sip‎

Lines changed: 76 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ template <TYPE>
2828
{
2929
%TypeHeaderCode
3030
#include <QVector>
31+
#if (SIP_VERSION >= 0x040900)
32+
#define sipClass_QString ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString))
33+
#define sipClass_QVariant ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QVariant))
34+
#endif
3135
%End
3236

3337
%ConvertFromTypeCode
@@ -79,17 +83,17 @@ template <TYPE>
7983
for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
8084
{
8185
int state;
82-
//TYPE *t = reinterpret_cast<TYPE *>(sipConvertToInstance(PyList_GET_ITEM(sipPy, i), (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
86+
//TYPE *t = reinterpret_cast<TYPE *>(sipConvertToInstance(PyList_GET_ITEM(sipPy, i), sipClass_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
8387
QVector<TYPE> * t = reinterpret_cast< QVector<TYPE> * >(sipConvertToMappedType(PyList_GET_ITEM(sipPy, i), qvector_qgspoint, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
8488

8589
if (*sipIsErr)
8690
{
87-
sipReleaseInstance(t, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), state);
91+
sipReleaseInstance(t, sipClass_TYPE, state);
8892
delete ql;
8993
return 0;
9094
}
9195
ql->append(*t);
92-
sipReleaseInstance(t, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), state);
96+
sipReleaseInstance(t, sipClass_TYPE, state);
9397
}
9498

9599
*sipCppPtr = ql;
@@ -104,6 +108,10 @@ template <TYPE>
104108
{
105109
%TypeHeaderCode
106110
#include <QVector>
111+
#if (SIP_VERSION >= 0x040900)
112+
#define sipClass_QString ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString))
113+
#define sipClass_QVariant ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QVariant))
114+
#endif
107115
%End
108116

109117
%ConvertFromTypeCode
@@ -155,17 +163,17 @@ template <TYPE>
155163
for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
156164
{
157165
int state;
158-
//TYPE *t = reinterpret_cast<TYPE *>(sipConvertToInstance(PyList_GET_ITEM(sipPy, i), (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
166+
//TYPE *t = reinterpret_cast<TYPE *>(sipConvertToInstance(PyList_GET_ITEM(sipPy, i), sipClass_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
159167
QVector<QVector<TYPE> > * t = reinterpret_cast< QVector< QVector<TYPE> > * >(sipConvertToMappedType(PyList_GET_ITEM(sipPy, i), qvector_qgspoint, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
160168

161169
if (*sipIsErr)
162170
{
163-
sipReleaseInstance(t, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), state);
171+
sipReleaseInstance(t, sipClass_TYPE, state);
164172
delete ql;
165173
return 0;
166174
}
167175
ql->append(*t);
168-
sipReleaseInstance(t, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), state);
176+
sipReleaseInstance(t, sipClass_TYPE, state);
169177
}
170178

171179
*sipCppPtr = ql;
@@ -179,6 +187,10 @@ template <TYPE>
179187
{
180188
%TypeHeaderCode
181189
#include <QSet>
190+
#if (SIP_VERSION >= 0x040900)
191+
#define sipClass_QString ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString))
192+
#define sipClass_QVariant ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QVariant))
193+
#endif
182194
%End
183195

184196
%ConvertFromTypeCode
@@ -229,6 +241,10 @@ template <TYPE>
229241
{
230242
%TypeHeaderCode
231243
#include <QSet>
244+
#if (SIP_VERSION >= 0x040900)
245+
#define sipClass_QString ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString))
246+
#define sipClass_QVariant ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QVariant))
247+
#endif
232248
%End
233249

234250
%ConvertFromTypeCode
@@ -245,7 +261,7 @@ template <TYPE>
245261
TYPE *t = new TYPE(*it);
246262
PyObject *tobj;
247263

248-
if ((tobj = sipConvertFromNewInstance(t, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), sipTransferObj)) == NULL)
264+
if ((tobj = sipConvertFromNewInstance(t, sipClass_TYPE, sipTransferObj)) == NULL)
249265
{
250266
Py_DECREF(l);
251267
delete t;
@@ -265,7 +281,7 @@ template <TYPE>
265281
return 0;
266282

267283
for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
268-
if (!sipCanConvertToInstance(PyList_GET_ITEM(sipPy, i), (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), SIP_NOT_NONE))
284+
if (!sipCanConvertToInstance(PyList_GET_ITEM(sipPy, i), sipClass_TYPE, SIP_NOT_NONE))
269285
return 0;
270286

271287
return 1;
@@ -276,16 +292,16 @@ template <TYPE>
276292
for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
277293
{
278294
int state;
279-
TYPE* t = reinterpret_cast<TYPE *>(sipConvertToInstance(PyList_GET_ITEM(sipPy, i), (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
295+
TYPE* t = reinterpret_cast<TYPE *>(sipConvertToInstance(PyList_GET_ITEM(sipPy, i), sipClass_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
280296

281297
if (*sipIsErr)
282298
{
283-
sipReleaseInstance(t, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), state);
299+
sipReleaseInstance(t, sipClass_TYPE, state);
284300
delete qset;
285301
return 0;
286302
}
287303
qset->insert(*t);
288-
sipReleaseInstance(t, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), state);
304+
sipReleaseInstance(t, sipClass_TYPE, state);
289305
}
290306

291307
*sipCppPtr = qset;
@@ -301,6 +317,10 @@ template<TYPE>
301317
{
302318
%TypeHeaderCode
303319
#include <QMap>
320+
#if (SIP_VERSION >= 0x040900)
321+
#define sipClass_QString ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString))
322+
#define sipClass_QVariant ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QVariant))
323+
#endif
304324
%End
305325

306326
%ConvertFromTypeCode
@@ -366,7 +386,7 @@ template<TYPE>
366386
Py_ssize_t j = 0;
367387
while (PyDict_Next(tobj, &j, &kobj2, &tobj2))
368388
{
369-
if (!sipCanConvertToInstance(tobj2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), SIP_NOT_NONE))
389+
if (!sipCanConvertToInstance(tobj2, sipClass_TYPE, SIP_NOT_NONE))
370390
return 0;
371391
}
372392

@@ -393,17 +413,17 @@ template<TYPE>
393413
int k2 = PyInt_AsLong(kobj2);
394414
int state;
395415

396-
TYPE* fa = reinterpret_cast<TYPE*>(sipConvertToInstance(tobj2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), sipTransferObj,SIP_NOT_NONE,&state,sipIsErr));
416+
TYPE* fa = reinterpret_cast<TYPE*>(sipConvertToInstance(tobj2, sipClass_TYPE, sipTransferObj,SIP_NOT_NONE,&state,sipIsErr));
397417

398418
if (*sipIsErr)
399419
{
400-
sipReleaseInstance(tobj2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), state);
420+
sipReleaseInstance(tobj2, sipClass_TYPE, state);
401421
delete qm;
402422
return 0;
403423
}
404424

405425
qm2.insert(k2, *fa);
406-
sipReleaseInstance(tobj2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE), state);
426+
sipReleaseInstance(tobj2, sipClass_TYPE, state);
407427
}
408428
qm->insert(k, qm2);
409429
}
@@ -418,6 +438,10 @@ template<TYPE>
418438
{
419439
%TypeHeaderCode
420440
#include <QMap>
441+
#if (SIP_VERSION >= 0x040900)
442+
#define sipClass_QString ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString))
443+
#define sipClass_QVariant ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QVariant))
444+
#endif
421445
%End
422446

423447
%ConvertFromTypeCode
@@ -434,7 +458,7 @@ template<TYPE>
434458
{
435459
QString *t1 = new QString(i.key());
436460

437-
PyObject *t1obj = sipConvertFromNewInstance(t1, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString), sipTransferObj);
461+
PyObject *t1obj = sipConvertFromNewInstance(t1, sipClass_QString, sipTransferObj);
438462
PyObject *t2obj = PyInt_FromLong( (long) i.value() );
439463

440464
if (t1obj == NULL || t2obj == NULL || PyDict_SetItem(d, t1obj, t2obj) < 0)
@@ -480,7 +504,7 @@ template<TYPE>
480504

481505
while (PyDict_Next(sipPy, &i, &t1obj, &t2obj))
482506
{
483-
if (!sipCanConvertToInstance(t1obj, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString), SIP_NOT_NONE))
507+
if (!sipCanConvertToInstance(t1obj, sipClass_QString, SIP_NOT_NONE))
484508
return 0;
485509
}
486510

@@ -493,19 +517,19 @@ template<TYPE>
493517
{
494518
int state;
495519

496-
QString *t1 = reinterpret_cast<QString *>(sipConvertToInstance(t1obj, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString), sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
520+
QString *t1 = reinterpret_cast<QString *>(sipConvertToInstance(t1obj, sipClass_QString, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
497521
QVariant::Type t2 = (QVariant::Type) PyInt_AsLong(t1obj);
498522

499523
if (*sipIsErr)
500524
{
501-
sipReleaseInstance(t1, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString), state);
525+
sipReleaseInstance(t1, sipClass_QString, state);
502526
delete qm;
503527
return 0;
504528
}
505529

506530
qm->insert(*t1, t2);
507531

508-
sipReleaseInstance(t1, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString), state);
532+
sipReleaseInstance(t1, sipClass_QString, state);
509533
}
510534

511535
*sipCppPtr = qm;
@@ -518,7 +542,11 @@ template<TYPE1, TYPE2>
518542
%MappedType QMap<TYPE1, TYPE2*>
519543
{
520544
%TypeHeaderCode
521-
#include <qmap.h>
545+
#include <QMap>
546+
#if (SIP_VERSION >= 0x040900)
547+
#define sipClass_QString ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString))
548+
#define sipClass_QVariant ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QVariant))
549+
#endif
522550
%End
523551

524552
%ConvertFromTypeCode
@@ -536,8 +564,8 @@ template<TYPE1, TYPE2>
536564
TYPE1 *t1 = new TYPE1(i.key());
537565
TYPE2 *t2 = i.value();
538566

539-
PyObject *t1obj = sipConvertFromNewInstance(t1, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE1), sipTransferObj);
540-
PyObject *t2obj = sipConvertFromInstance(t2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE2), sipTransferObj);
567+
PyObject *t1obj = sipConvertFromNewInstance(t1, sipClass_TYPE1, sipTransferObj);
568+
PyObject *t2obj = sipConvertFromInstance(t2, sipClass_TYPE2, sipTransferObj);
541569

542570
if (t1obj == NULL || t2obj == NULL || PyDict_SetItem(d, t1obj, t2obj) < 0)
543571
{
@@ -581,10 +609,10 @@ template<TYPE1, TYPE2>
581609

582610
while (PyDict_Next(sipPy, &i, &t1obj, &t2obj))
583611
{
584-
if (!sipCanConvertToInstance(t1obj, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE1), SIP_NOT_NONE))
612+
if (!sipCanConvertToInstance(t1obj, sipClass_TYPE1, SIP_NOT_NONE))
585613
return 0;
586614

587-
if (!sipCanConvertToInstance(t2obj, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE2), SIP_NOT_NONE))
615+
if (!sipCanConvertToInstance(t2obj, sipClass_TYPE2, SIP_NOT_NONE))
588616
return 0;
589617
}
590618

@@ -597,22 +625,22 @@ template<TYPE1, TYPE2>
597625
{
598626
int state1, state2;
599627

600-
TYPE1 *t1 = reinterpret_cast<TYPE1 *>(sipConvertToInstance(t1obj, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE1), sipTransferObj, SIP_NOT_NONE, &state1, sipIsErr));
601-
TYPE2 *t2 = reinterpret_cast<TYPE2 *>(sipConvertToInstance(t2obj, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE2), sipTransferObj, SIP_NOT_NONE, &state2, sipIsErr));
628+
TYPE1 *t1 = reinterpret_cast<TYPE1 *>(sipConvertToInstance(t1obj, sipClass_TYPE1, sipTransferObj, SIP_NOT_NONE, &state1, sipIsErr));
629+
TYPE2 *t2 = reinterpret_cast<TYPE2 *>(sipConvertToInstance(t2obj, sipClass_TYPE2, sipTransferObj, SIP_NOT_NONE, &state2, sipIsErr));
602630

603631
if (*sipIsErr)
604632
{
605-
sipReleaseInstance(t1, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE1), state1);
606-
sipReleaseInstance(t2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE2), state2);
633+
sipReleaseInstance(t1, sipClass_TYPE1, state1);
634+
sipReleaseInstance(t2, sipClass_TYPE2, state2);
607635

608636
delete qm;
609637
return 0;
610638
}
611639

612640
qm->insert(*t1, t2);
613641

614-
sipReleaseInstance(t1, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE1), state1);
615-
sipReleaseInstance(t2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE2), state2);
642+
sipReleaseInstance(t1, sipClass_TYPE1, state1);
643+
sipReleaseInstance(t2, sipClass_TYPE2, state2);
616644
}
617645

618646
*sipCppPtr = qm;
@@ -626,6 +654,10 @@ template<double, TYPE2>
626654
{
627655
%TypeHeaderCode
628656
#include <QMultiMap>
657+
#if (SIP_VERSION >= 0x040900)
658+
#define sipClass_QString ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString))
659+
#define sipClass_QVariant ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QVariant))
660+
#endif
629661
%End
630662

631663
%ConvertFromTypeCode
@@ -644,7 +676,7 @@ template<double, TYPE2>
644676
const double t1 = i.key();
645677
TYPE2 * t2 = &i.value();
646678
PyObject *t1obj = PyFloat_FromDouble(t1);
647-
PyObject *t2obj = sipConvertFromInstance(t2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE2), sipTransferObj);
679+
PyObject *t2obj = sipConvertFromInstance(t2, sipClass_TYPE2, sipTransferObj);
648680
if (PyDict_GetItem(d, t1obj) == NULL) {
649681
PyObject *lst = PyList_New(0);
650682
PyDict_SetItem(d, t1obj, lst);
@@ -697,7 +729,7 @@ template<double, TYPE2>
697729
{
698730
for (int i = 0; i < PyList_GET_SIZE(t2obj); ++i) {
699731
if (!sipCanConvertToInstance(PyList_GET_ITEM(t2obj, i),
700-
(sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE2), SIP_NOT_NONE))
732+
sipClass_TYPE2, SIP_NOT_NONE))
701733
return 0;
702734
}
703735
}
@@ -714,23 +746,23 @@ template<double, TYPE2>
714746
TYPE2 *t2 =
715747
reinterpret_cast<TYPE2 *>(sipConvertToInstance(PyList_GET_ITEM(t2obj,
716748
i),
717-
(sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE2),
749+
sipClass_TYPE2,
718750
sipTransferObj,
719751
SIP_NOT_NONE,
720752
&state2,
721753
sipIsErr));
722754

723755
if (*sipIsErr)
724756
{
725-
sipReleaseInstance(t2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE2), state2);
757+
sipReleaseInstance(t2, sipClass_TYPE2, state2);
726758

727759
delete qm;
728760
return 0;
729761
}
730762

731763
qm->insert(k, *t2);
732764

733-
sipReleaseInstance(t2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_TYPE2), state2);
765+
sipReleaseInstance(t2, sipClass_TYPE2, state2);
734766
}
735767
}
736768

@@ -744,6 +776,10 @@ template<double, TYPE2>
744776
{
745777
%TypeHeaderCode
746778
#include <QMap>
779+
#if (SIP_VERSION >= 0x040900)
780+
#define sipClass_QString ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString))
781+
#define sipClass_QVariant ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QVariant))
782+
#endif
747783
%End
748784

749785
%ConvertFromTypeCode
@@ -759,7 +795,7 @@ template<double, TYPE2>
759795
QgsOverlayObject* oobj = new QgsOverlayObject(*it.value());
760796

761797
PyObject* keyobj = PyInt_FromLong(it.key());
762-
PyObject* pyOobj = sipConvertFromInstance(oobj, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_QgsOverlayObject), sipTransferObj);
798+
PyObject* pyOobj = sipConvertFromInstance(oobj, sipClass_QgsOverlayObject, sipTransferObj);
763799
PyDict_SetItem(d, keyobj, pyOobj);
764800

765801
if(pyOobj == NULL || keyobj == NULL || PyDict_SetItem(d, keyobj, pyOobj) < 0)
@@ -797,18 +833,18 @@ template<double, TYPE2>
797833
{
798834
int state;
799835
int t1 = (int)(PyFloat_AsDouble(t1obj));
800-
QgsOverlayObject* t2 = reinterpret_cast<QgsOverlayObject*>(sipConvertToInstance(t2obj, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_QgsOverlayObject), sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
836+
QgsOverlayObject* t2 = reinterpret_cast<QgsOverlayObject*>(sipConvertToInstance(t2obj, sipClass_QgsOverlayObject, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
801837

802838
if (*sipIsErr)
803839
{
804-
sipReleaseInstance(t2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_QgsOverlayObject), state);
840+
sipReleaseInstance(t2, sipClass_QgsOverlayObject, state);
805841
delete qm;
806842
return 0;
807843
}
808844

809845
qm->insert(t1, t2);
810846

811-
sipReleaseInstance(t2, (sipWrapperType *) sipTypeAsPyTypeObject (sipType_QgsOverlayObject), state);
847+
sipReleaseInstance(t2, sipClass_QgsOverlayObject, state);
812848
}
813849

814850
*sipCppPtr = qm;

0 commit comments

Comments
 (0)