Changeset 8646:b5f923c81c53 in orange


Ignore:
Timestamp:
08/10/11 12:23:23 (3 years ago)
Author:
miha <miha.stajdohar@…>
Branch:
default
Convert:
b901c62692288d2633ac1169d2560e7d2c70cd16
Message:

Added new type QMap<int, QPair<double, double> >.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/orangeplot/types.sip

    r8600 r8646  
    263263%End 
    264264}; 
     265 
     266// QMap<int, QPair<double, double> > is implemented as a Python dictionary of tuples. 
     267%MappedType QMap<int, QPair<double, double> > /DocType="dict-of-int-tuple"/ 
     268{ 
     269%TypeHeaderCode 
     270#include <qmap.h> 
     271%End 
     272 
     273%ConvertFromTypeCode 
     274    // Create the dictionary. 
     275    PyObject *d = PyDict_New(); 
     276 
     277    if (!d) 
     278        return NULL; 
     279 
     280    // Set the dictionary elements. 
     281    QMap<int, QPair<double, double> >::const_iterator i = sipCpp->constBegin(); 
     282 
     283    while (i != sipCpp->constEnd()) 
     284    { 
     285        PyObject *kobj = SIPLong_FromLong(i.key()); 
     286        PyObject *tobj; 
     287        if ((tobj = PyTuple_New(2)) == NULL) 
     288            return NULL; 
     289         
     290        PyTuple_SET_ITEM(tobj, 0, PyFloat_FromDouble((double)i.value().first)); 
     291        PyTuple_SET_ITEM(tobj, 1, PyFloat_FromDouble((double)i.value().second)); 
     292     
     293        if (kobj == NULL || tobj == NULL || PyDict_SetItem(d, kobj, tobj) < 0) 
     294        { 
     295            Py_DECREF(d); 
     296            if (kobj) 
     297            { 
     298                Py_DECREF(kobj); 
     299            } 
     300            if (tobj) 
     301            { 
     302                Py_DECREF(tobj); 
     303            } 
     304            return NULL; 
     305        } 
     306 
     307        Py_DECREF(kobj); 
     308        Py_DECREF(tobj); 
     309 
     310        ++i; 
     311    } 
     312 
     313    return d; 
     314%End 
     315 
     316 
     317%ConvertToTypeCode 
     318    PyObject *kobj, *tobj; 
     319    SIP_SSIZE_T i = 0; 
     320 
     321    // Check the type if that is all that is required. 
     322    if (sipIsErr == NULL) 
     323    { 
     324        if (!PyDict_Check(sipPy)) 
     325            return 0; 
     326        return 1; 
     327    } 
     328 
     329    QMap<int, QPair<double, double> > *qm = new QMap<int, QPair<double, double> >; 
     330  
     331    while (PyDict_Next(sipPy, &i, &kobj, &tobj)) 
     332    { 
     333        int k = SIPLong_AsLong(kobj); 
     334        double fst = (int)PyInt_AsLong(PyTuple_GET_ITEM(tobj,0)); 
     335        double sec = (int)PyInt_AsLong(PyTuple_GET_ITEM(tobj,1)); 
     336         
     337        QPair<double, double> t(fst,sec); 
     338  
     339        if (*sipIsErr) 
     340        { 
     341            delete qm; 
     342            return 0; 
     343        } 
     344 
     345        qm->insert(k, t); 
     346    } 
     347  
     348    *sipCppPtr = qm; 
     349  
     350    return sipGetState(sipTransferObj); 
     351%End 
     352}; 
Note: See TracChangeset for help on using the changeset viewer.