Salome HOME
Sequence for doubles has been specialized.
authoradv <adv@opencascade.com>
Fri, 24 Jan 2014 09:47:43 +0000 (09:47 +0000)
committeradv <adv@opencascade.com>
Fri, 24 Jan 2014 09:47:43 +0000 (09:47 +0000)
CMake/UsePyQt4EXT.cmake
src/HYDROPy/CAS/NCollection_Sequence.sip

index ce9201388086d6cdfd859de15f1ad0aa775a6572..32006e70b8f61d411dda6517be378b4c023901e2 100644 (file)
@@ -151,6 +151,9 @@ MACRO(PYQT4_WRAP_SIP_EXT outfiles)
     LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence2600.cc)
     SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence2600.cc)
 
+    LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence2400.cc)
+    SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence2400.cc)
+
     LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100Handle_HYDROData_Entity.cc)
     SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100Handle_HYDROData_Entity.cc)
        
index dc4f30d9d9c9e313d7968dd8ab3f0125d4ba2239..37106f2ab1b4c04c8e1ae02d6ebadfe97909e9b1 100644 (file)
@@ -112,6 +112,67 @@ template<TYPE>
 %End
 };
 
+// NCollection_Sequence<double> is implemented as a Python list of floats.
+%MappedType NCollection_Sequence<double>
+{
+%TypeHeaderCode
+#include <NCollection_Sequence.hxx>
+%End
+
+%ConvertFromTypeCode
+    // Create the list.
+    PyObject *l;
+
+    if ( ( l = PyList_New( sipCpp->Length() ) ) == NULL )
+      return NULL;
+
+    // Set the list elements.
+    for ( int i = 1, n = sipCpp->Length(); i <= n; ++i )
+    {
+      PyObject *pobj;
+      if ( ( pobj = PyFloat_FromDouble( sipCpp->Value( i ) ) ) == NULL )
+      {
+        Py_DECREF(l);
+
+        return NULL;
+      }
+
+      PyList_SET_ITEM( l, i, pobj );
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    // Check the type if that is all that is required.
+    if ( sipIsErr == NULL )
+        return ( PySequence_Check( sipPy)  && PySequence_Size( sipPy ) >= 0 );
+
+    NCollection_Sequence<double> *aSeq = new NCollection_Sequence<double>;
+
+    SIP_SSIZE_T len = PySequence_Size(sipPy);
+    for ( SIP_SSIZE_T i = 0; i < len; ++i )
+    {
+      PyObject *itm = PySequence_ITEM( sipPy, i );
+      if ( !itm )
+      {
+        delete aSeq;
+        *sipIsErr = 1;
+
+        return 0;
+      }
+
+      aSeq->Append( PyFloat_AsDouble( itm ) );
+
+      Py_DECREF( itm );
+    }
+    *sipCppPtr = aSeq;
+    return sipGetState( sipTransferObj );
+%End
+};
+
 // NCollection_Sequence<int> is implemented as a Python list of integers.
 %MappedType NCollection_Sequence<int>
 {