From 16cecc72628fbd69c3486834e24c3cde58b85fd1 Mon Sep 17 00:00:00 2001 From: adv Date: Thu, 16 Jan 2014 06:26:50 +0000 Subject: [PATCH] NCollection sequences improved. --- CMake/UsePyQt4EXT.cmake | 30 ++--- src/HYDROPy/CAS/NCollection_Sequence.sip | 153 ++++++++++++++++++++--- src/HYDROPy/HYDROData_Bathymetry.sip | 2 +- src/HYDROPy/HYDROData_IPolyline.sip | 2 +- src/HYDROPy/HYDROData_PolylineXY.sip | 3 +- src/HYDROPy/HYDROData_Profile.sip | 16 +-- 6 files changed, 160 insertions(+), 46 deletions(-) diff --git a/CMake/UsePyQt4EXT.cmake b/CMake/UsePyQt4EXT.cmake index 5fb12fd4..b3898524 100644 --- a/CMake/UsePyQt4EXT.cmake +++ b/CMake/UsePyQt4EXT.cmake @@ -127,15 +127,6 @@ MACRO(PYQT4_WRAP_SIP_EXT outfiles) LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyHYDROData_Zone.cc) SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyHYDROData_Zone.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) - - LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100gp_XYZ.cc) - SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100gp_XYZ.cc) - -# LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100gp_XY.cc) -# SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100gp_XY.cc) - LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPygp_XYZ.cc) SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPygp_XYZ.cc) @@ -151,21 +142,24 @@ MACRO(PYQT4_WRAP_SIP_EXT outfiles) LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyTCollection_AsciiString.cc) SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyTCollection_AsciiString.cc) - LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100HYDROData_BathymetryAltitudePoint.cc) - SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100HYDROData_BathymetryAltitudePoint.cc) + LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence1800.cc) + SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence1800.cc) - LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100HYDROData_IPolylinePoint.cc) - SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100HYDROData_IPolylinePoint.cc) + 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_Sequence0100HYDROData_ProfileProfilePoint.cc) - SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100HYDROData_ProfileProfilePoint.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) + + LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100gp_XY.cc) + SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100gp_XY.cc) + LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100gp_XYZ.cc) + SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100gp_XYZ.cc) + LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100HYDROData_IPolylineSectionType.cc) SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100HYDROData_IPolylineSectionType.cc) - LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100BOOLTYPE.cc) - SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100BOOLTYPE.cc) - LIST(APPEND _output ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100TCollection_AsciiString.cc) SET(${outfiles} ${${outfiles}} ${CMAKE_CURRENT_BINARY_DIR}/sipHYDROPyNCollection_Sequence0100TCollection_AsciiString.cc) diff --git a/src/HYDROPy/CAS/NCollection_Sequence.sip b/src/HYDROPy/CAS/NCollection_Sequence.sip index 8c002cd3..dc4f30d9 100644 --- a/src/HYDROPy/CAS/NCollection_Sequence.sip +++ b/src/HYDROPy/CAS/NCollection_Sequence.sip @@ -36,24 +36,24 @@ template // Create the list. PyObject *l; - if ((l = PyList_New(sipCpp->Length())) == NULL) - return NULL; + if ( ( l = PyList_New( sipCpp->Length() ) ) == NULL ) + return NULL; // Set the list elements. - for (int i = 1; i <= sipCpp->Length(); ++i) + for ( int i = 1, n = sipCpp->Length(); i <= n; ++i ) { - TYPE *t = new TYPE(sipCpp->Value(i)); - PyObject *tobj; + TYPE* t = new TYPE( sipCpp->Value( i ) ); - if ((tobj = sipConvertFromNewType(t, sipFindType("TYPE"), sipTransferObj)) == NULL) - { - Py_DECREF(l); - delete t; + PyObject* pobj; + if ( ( pobj = sipConvertFromNewType( t, sipType_TYPE, sipTransferObj ) ) == NULL ) + { + Py_DECREF( l ); + delete t; - return NULL; - } + return NULL; + } - PyList_SET_ITEM(l, i - 1, tobj); + PyList_SET_ITEM( l, i - 1, pobj ); } return l; @@ -71,7 +71,7 @@ template for (SIP_SSIZE_T i = 0; i < len; ++i) { PyObject *itm = PySequence_ITEM(sipPy, i); - bool ok = (itm && sipCanConvertToType(itm, sipFindType("TYPE"), SIP_NOT_NONE)); + bool ok = (itm && sipCanConvertToType(itm, sipType_TYPE, SIP_NOT_NONE)); Py_XDECREF(itm); @@ -89,13 +89,13 @@ template { PyObject *itm = PySequence_ITEM(sipPy, i); int state; - TYPE *t = reinterpret_cast(sipConvertToType(itm, sipFindType("TYPE"), sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); + TYPE *t = reinterpret_cast(sipConvertToType(itm, sipType_TYPE, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr)); Py_DECREF(itm); if (*sipIsErr) { - sipReleaseType(t, sipFindType("TYPE"), state); + sipReleaseType(t, sipType_TYPE, state); delete aSeq; return 0; @@ -103,7 +103,7 @@ template aSeq->Append(*t); - sipReleaseType(t, sipFindType("TYPE"), state); + sipReleaseType(t, sipType_TYPE, state); } *sipCppPtr = aSeq; @@ -112,3 +112,124 @@ template %End }; +// NCollection_Sequence is implemented as a Python list of integers. +%MappedType NCollection_Sequence +{ +%TypeHeaderCode +#include +%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 = SIPLong_FromLong( 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 *aSeq = new NCollection_Sequence; + + 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( SIPLong_AsLong( itm ) ); + + Py_DECREF( itm ); + } + + *sipCppPtr = aSeq; + + return sipGetState( sipTransferObj ); +%End +}; + +// NCollection_Sequence is implemented as a Python list of integers. +%MappedType NCollection_Sequence +{ +%TypeHeaderCode +#include +%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 = SIPLong_FromLong( 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 *aSeq = new NCollection_Sequence; + + 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( SIPLong_AsLong( itm ) != 0 ); + + Py_DECREF( itm ); + } + + *sipCppPtr = aSeq; + + return sipGetState( sipTransferObj ); +%End +}; \ No newline at end of file diff --git a/src/HYDROPy/HYDROData_Bathymetry.sip b/src/HYDROPy/HYDROData_Bathymetry.sip index 057b2767..c13645ad 100644 --- a/src/HYDROPy/HYDROData_Bathymetry.sip +++ b/src/HYDROPy/HYDROData_Bathymetry.sip @@ -40,7 +40,7 @@ class HYDROData_Bathymetry : HYDROData_IAltitudeObject %End typedef gp_XYZ AltitudePoint; - typedef NCollection_Sequence AltitudePoints; + typedef NCollection_Sequence AltitudePoints; %TypeHeaderCode diff --git a/src/HYDROPy/HYDROData_IPolyline.sip b/src/HYDROPy/HYDROData_IPolyline.sip index 885a97b9..da301071 100644 --- a/src/HYDROPy/HYDROData_IPolyline.sip +++ b/src/HYDROPy/HYDROData_IPolyline.sip @@ -31,7 +31,7 @@ class HYDROData_IPolyline : HYDROData_Entity /Abstract/ %End typedef gp_XY Point; - typedef NCollection_Sequence PointsList; + typedef NCollection_Sequence PointsList; %ConvertToSubClassCode diff --git a/src/HYDROPy/HYDROData_PolylineXY.sip b/src/HYDROPy/HYDROData_PolylineXY.sip index 82aa9ff5..40781bdf 100644 --- a/src/HYDROPy/HYDROData_PolylineXY.sip +++ b/src/HYDROPy/HYDROData_PolylineXY.sip @@ -22,7 +22,6 @@ %ExportedHeaderCode #include - typedef bool BOOLTYPE; %End class HYDROData_PolylineXY : HYDROData_IPolyline @@ -90,7 +89,7 @@ public: */ void GetSections( NCollection_Sequence& theSectNames, NCollection_Sequence& theSectTypes, - /*NCollection_Sequence&*/ NCollection_Sequence& theSectClosures ) const; + NCollection_Sequence& theSectClosures ) const; /** * Replaces point for section with index "theSectionIndex". diff --git a/src/HYDROPy/HYDROData_Profile.sip b/src/HYDROPy/HYDROData_Profile.sip index ab34b1bc..11c9a2a8 100644 --- a/src/HYDROPy/HYDROData_Profile.sip +++ b/src/HYDROPy/HYDROData_Profile.sip @@ -32,7 +32,7 @@ class HYDROData_Profile : public HYDROData_Object public: typedef gp_XYZ ProfilePoint; - typedef NCollection_Sequence ProfilePoints; + typedef NCollection_Sequence ProfilePoints; public: /** @@ -174,15 +174,15 @@ public: * \param theFileName the path to file * \return \c number of successfully imported profiles */ - static int ImportFromFile( const HYDROData_Document theDoc, - const TCollection_AsciiString& theFileName, - NCollection_Sequence& theBadProfilesIds ) - [int ( const Handle_HYDROData_Document& , - const TCollection_AsciiString& , - NCollection_Sequence& )]; + static int ImportFromFile( HYDROData_Document theDoc, + const TCollection_AsciiString& theFileName, + NCollection_Sequence& theBadProfilesIds ) + [int ( const Handle_HYDROData_Document&, + const TCollection_AsciiString&, + NCollection_Sequence& )]; %MethodCode Py_BEGIN_ALLOW_THREADS - sipRes = HYDROData_Profile::ImportFromFile( a0, *a1, a2 ); + sipRes = HYDROData_Profile::ImportFromFile( a0, *a1, *a2 ); Py_END_ALLOW_THREADS %End -- 2.39.2