Changeset 8599:642a144fe7f4 in orange


Ignore:
Timestamp:
08/04/11 14:34:13 (3 years ago)
Author:
miha <miha.stajdohar@…>
Branch:
default
Convert:
8e26c20e069b64f95db41aee240ad1b34d07cc56
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/orangeplot/types.sip

    r8588 r8599  
    9797}; 
    9898 
     99// QMap<int, bool> is implemented as a Python dictionary. 
     100%MappedType QMap<int, bool> /DocType="dict-of-int-bool"/ 
     101{ 
     102%TypeHeaderCode 
     103#include <qmap.h> 
     104%End 
     105 
     106%ConvertFromTypeCode 
     107    // Create the dictionary. 
     108    PyObject *d = PyDict_New(); 
     109 
     110    if (!d) 
     111        return NULL; 
     112 
     113    // Set the dictionary elements. 
     114    QMap<int, bool>::const_iterator i = sipCpp->constBegin(); 
     115 
     116    while (i != sipCpp->constEnd()) 
     117    { 
     118        PyObject *kobj = SIPLong_FromLong(i.key()); 
     119        PyObject *tobj = Py_False; 
     120         
     121        if (i.value()) 
     122        { 
     123            tobj = Py_True; 
     124        } 
     125 
     126        if (kobj == NULL || tobj == NULL || PyDict_SetItem(d, kobj, tobj) < 0) 
     127        { 
     128            Py_DECREF(d); 
     129            if (kobj) 
     130            { 
     131                Py_DECREF(kobj); 
     132            } 
     133            if (tobj) 
     134            { 
     135                Py_DECREF(tobj); 
     136            } 
     137            return NULL; 
     138        } 
     139 
     140        Py_DECREF(kobj); 
     141        Py_DECREF(tobj); 
     142 
     143        ++i; 
     144    } 
     145 
     146    return d; 
     147%End 
     148 
     149%ConvertToTypeCode 
     150    PyObject *kobj, *tobj; 
     151    SIP_SSIZE_T i = 0; 
     152 
     153    // Check the type if that is all that is required. 
     154    if (sipIsErr == NULL) 
     155    { 
     156        if (!PyDict_Check(sipPy)) 
     157            return 0; 
     158        return 1; 
     159    } 
     160 
     161    QMap<int, bool> *qm = new QMap<int, bool>; 
     162  
     163    while (PyDict_Next(sipPy, &i, &kobj, &tobj)) 
     164    { 
     165        int k = SIPLong_AsLong(kobj); 
     166        bool t = false; 
     167        if PyBool_Check(tobj) 
     168        { 
     169            t = true; 
     170        } 
     171  
     172        if (*sipIsErr) 
     173        { 
     174            delete qm; 
     175            return 0; 
     176        } 
     177 
     178        qm->insert(k, t); 
     179    } 
     180  
     181    *sipCppPtr = qm; 
     182  
     183    return sipGetState(sipTransferObj); 
     184%End 
     185}; 
    99186 
    100187// QMap<int, double> is implemented as a Python dictionary. 
     
    142229%End 
    143230 
     231 
    144232%ConvertToTypeCode 
    145233    PyObject *kobj, *tobj; 
Note: See TracChangeset for help on using the changeset viewer.