rewrite real in api c++, some change in sparse type 51/11451/4
Antoine ELIAS [Mon, 6 May 2013 11:39:20 +0000 (13:39 +0200)]
Change-Id: I4e1a09f0987d837e8696801259f7db8132f1c405

33 files changed:
scilab/modules/api_scilab/src/cpp/api_list.cpp
scilab/modules/boolean/sci_gateway/cpp/sci_bool2s.cpp
scilab/modules/boolean/sci_gateway/cpp/sci_find.cpp
scilab/modules/elementary_functions/Makefile.am
scilab/modules/elementary_functions/Makefile.in
scilab/modules/elementary_functions/sci_gateway/c/gw_elementary_functions.c
scilab/modules/elementary_functions/sci_gateway/c/sci_real.c [deleted file]
scilab/modules/elementary_functions/sci_gateway/cpp/elem_func_gw/elem_func_gw.vcxproj
scilab/modules/elementary_functions/sci_gateway/cpp/elem_func_gw/elem_func_gw.vcxproj.filters
scilab/modules/elementary_functions/sci_gateway/cpp/sci_ceil.cpp
scilab/modules/elementary_functions/sci_gateway/cpp/sci_clean.cpp
scilab/modules/elementary_functions/sci_gateway/cpp/sci_cos.cpp
scilab/modules/elementary_functions/sci_gateway/cpp/sci_exp.cpp
scilab/modules/elementary_functions/sci_gateway/cpp/sci_floor.cpp
scilab/modules/elementary_functions/sci_gateway/cpp/sci_imag.cpp
scilab/modules/elementary_functions/sci_gateway/cpp/sci_imult.cpp
scilab/modules/elementary_functions/sci_gateway/cpp/sci_int.cpp
scilab/modules/elementary_functions/sci_gateway/cpp/sci_isreal.cpp
scilab/modules/elementary_functions/sci_gateway/cpp/sci_real.cpp [new file with mode: 0644]
scilab/modules/elementary_functions/sci_gateway/cpp/sci_sin.cpp
scilab/modules/elementary_functions/src/c/elementary_functions.vcxproj
scilab/modules/elementary_functions/src/c/elementary_functions.vcxproj.filters
scilab/modules/operations/src/cpp/types_addition.cpp
scilab/modules/operations/src/cpp/types_multiplication.cpp
scilab/modules/operations/src/cpp/types_or_and.cpp
scilab/modules/operations/src/cpp/types_substraction.cpp
scilab/modules/sparse/sci_gateway/cpp/sci_sparse.cpp
scilab/modules/sparse/sci_gateway/cpp/sci_spcompack.cpp
scilab/modules/sparse/sci_gateway/cpp/sci_spget.cpp
scilab/modules/sparse/sci_gateway/cpp/sci_spzeros.cpp
scilab/modules/types/includes/matrixiterator.hxx
scilab/modules/types/includes/sparse.hxx
scilab/modules/types/src/cpp/sparse.cpp

index 73b9045..ff9429a 100644 (file)
@@ -119,12 +119,13 @@ static void popListAddress(int _iRhsPos)
     {
         delete it->second->back();
         stackListPosition[_iRhsPos]->pop_back();
-        if(it->second->size() > 0 && it->second->back()->m_iLast == 1)
-        {//close cascade
+        if (it->second->size() > 0 && it->second->back()->m_iLast == 1)
+        {
+            //close cascade
             popListAddress(_iRhsPos);
         }
 
-        if(stackListPosition.find(_iRhsPos) != stackListPosition.end() && stackListPosition[_iRhsPos]->empty())
+        if (stackListPosition.find(_iRhsPos) != stackListPosition.end() && stackListPosition[_iRhsPos]->empty())
         {
             stackListPosition.erase(stackListPosition.find(_iRhsPos));
             //TODO : check to close list
@@ -147,7 +148,7 @@ int* getLastListAddress(int _iRhsPos, int _iItemPos)
         return NULL;
     }
 
-    if(_iItemPos == it->second->back()->m_piAddr[1])
+    if (_iItemPos == it->second->back()->m_piAddr[1])
     {
         it->second->back()->m_iLast = 1;
     }
@@ -247,7 +248,9 @@ char* getListTypeName(int _iType)
 
 SciErr getListItemNumber(void* _pvCtx, int* _piAddress, int* _piNbItem)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iType = 0;
 
     sciErr = getVarType(_pvCtx, _piAddress, &iType);
@@ -274,7 +277,9 @@ SciErr getListItemNumber(void* _pvCtx, int* _piAddress, int* _piNbItem)
 
 SciErr getListItemAddress(void* _pvCtx, int* _piAddress, int _iItemNum, int** _piItemAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iItem      = 0;
     int* piOffset    = NULL;
     int* piItemAddress = NULL;
@@ -365,7 +370,7 @@ static SciErr createCommonNamedList(void* _pvCtx, const char* _pstName, int _iLi
 
 static SciErr createCommonList(void* _pvCtx, int _iVar, int _iListType, int _iNbItem, int** _piAddress)
 {
-       SciErr sciErr;
+    SciErr sciErr;
     sciErr.iErr = 0;
     sciErr.iMsgCount = 0;
     // FIXME
@@ -375,7 +380,9 @@ static SciErr createCommonList(void* _pvCtx, int _iVar, int _iListType, int _iNb
 
 SciErr fillCommonList(void* _pvCtx, int* _piAddress, int _iListType, int _iNbItem)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piOffset = NULL;
 
     _piAddress[0] = _iListType;
@@ -409,7 +416,9 @@ SciErr readNamedMList(void* _pvCtx, const char* _pstName, int* _piNbItem, int**
 
 static SciErr readCommonNamedList(void* _pvCtx, const char* _pstName, int _iListType, int* _piNbItem, int** _piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr  = NULL;
     int iNbItem  = 0;
 
@@ -456,7 +465,9 @@ SciErr getMListInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piAddr
 
 SciErr getCommonListInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iListType, int** _piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
 
     sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, _piAddress);
     if (sciErr.iErr)
@@ -490,7 +501,9 @@ SciErr getMListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, i
 
 SciErr getCommomListInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iListType, int** _piAddress)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr  = NULL;
 
     sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
@@ -531,7 +544,7 @@ static SciErr createCommonListInList(void* _pvCtx, int _iVar, const char* _pstNa
     SciErr sciErr;
     sciErr.iErr = 0;
     sciErr.iMsgCount = 0;
-       // FIXME
+    // FIXME
 
     return sciErr;
 }
@@ -563,7 +576,9 @@ SciErr createCommonListInNamedList(void* _pvCtx, const char* _pstName, int* _piP
 
 SciErr allocCommonItemInList(void* _pvCtx, int* _piParent, int _iItemPos, int** _piChildAddr)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piOffset = NULL;
 
     //Does previous items was already inserted
@@ -624,7 +639,9 @@ SciErr getComplexMatrixOfDoubleInList(void* _pvCtx, int* _piParent, int _iItemPo
 
 static SciErr getCommonMatrixOfDoubleInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, double** _pdblReal, double** _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr  = NULL;
 
     sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
@@ -659,12 +676,14 @@ static SciErr allocCommonMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* /*_p
     sciErr.iErr = 0;
     sciErr.iMsgCount = 0;
     // FIXME
-       return sciErr;
+    return sciErr;
 }
 
 static SciErr fillCommonMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, double** _pdblReal, double** _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iNbItem    = 0;
     int* piOffset   = NULL;
     int* piChildAddr = NULL;
@@ -716,7 +735,9 @@ SciErr createComplexMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent
 
 SciErr createComplexZMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const doublecomplex* _pdblData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     double *pdblReal = NULL;
     double *pdblImg  = NULL;
 
@@ -734,12 +755,14 @@ SciErr createComplexZMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piParen
 
 SciErr createCommonMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* /*_piParent*/, int _iItemPos, int _iComplex, int _iRows, int _iCols, const double* _pdblReal, const double* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     double *pdblReal = NULL;
     double *pdblImg  = NULL;
 
     sciErr = allocCommonMatrixOfDoubleInList(_pvCtx, _iVar, NULL/*_piParent*/, _iItemPos, _iComplex, _iRows, _iCols, &pdblReal, &pdblImg);
-    if(sciErr.iErr)
+    if (sciErr.iErr)
     {
         addErrorMessage(&sciErr, API_ERROR_CREATE_DOUBLE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfDoubleInList" : "createMatrixOfDoubleInList", _iItemPos + 1);
         return sciErr;
@@ -799,7 +822,9 @@ SciErr readComplexMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName,
 
 static SciErr readCommonMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, double* _pdblReal, double* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iNbItem    = 0;
     int* piAddr    = NULL;
     int* piRoot    = NULL;
@@ -855,7 +880,9 @@ static SciErr readCommonMatrixOfDoubleInNamedList(void* _pvCtx, const char* _pst
 
 SciErr getMatrixOfStringInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr  = NULL;
 
     sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
@@ -878,14 +905,18 @@ SciErr getMatrixOfStringInList(void* _pvCtx, int* _piParent, int _iItemPos, int*
 
 SciErr createMatrixOfStringInList(void* _pvCtx, int _iVar, int* /*_piParent*/, int _iItemPos, int _iRows, int _iCols, const char* const* _pstStrings)
 {
-    SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     // FIXME
     return sciErr;
 }
 
 SciErr fillCommonMatrixOfStringInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const char* const* _pstStrings, int* _piTotalLen)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iNbItem   = 0;
 
     int* piAddr   = NULL;
@@ -930,7 +961,9 @@ SciErr createMatrixOfStringInNamedList(void* _pvCtx, const char* _pstName, int*
 
 SciErr readMatrixOfStringInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piLength, char** _pstStrings)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr    = NULL;
     int* piRoot    = NULL;
     int iNbItem    = 0;
@@ -973,7 +1006,9 @@ SciErr readMatrixOfStringInNamedList(void* _pvCtx, const char* _pstName, int* _p
 
 SciErr getMatrixOfBooleanInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int** _piBool)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr  = NULL;
 
     sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
@@ -995,11 +1030,13 @@ SciErr getMatrixOfBooleanInList(void* _pvCtx, int* _piParent, int _iItemPos, int
 
 SciErr createMatrixOfBooleanInList(void* _pvCtx, int _iVar, int* /*_piParent*/, int _iItemPos, int _iRows, int _iCols, const int* _piBool)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int *piBool   = NULL;
 
     sciErr = allocMatrixOfBooleanInList(_pvCtx, _iVar, NULL/*_piParent*/, _iItemPos, _iRows, _iCols, &piBool);
-    if(sciErr.iErr)
+    if (sciErr.iErr)
     {
         addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBooleanInList", _iItemPos + 1);
         return sciErr;
@@ -1014,52 +1051,57 @@ SciErr createMatrixOfBooleanInList(void* _pvCtx, int _iVar, int* /*_piParent*/,
 
 SciErr allocMatrixOfBooleanInList(void* _pvCtx, int _iVar, int* /*_piParent*/, int _iItemPos, int _iRows, int _iCols, int** _piBool)
 {
-    SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     // FIXME
     return sciErr;
 }
 
 static SciErr fillMatrixOfBoolInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, int** _piBool)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-/*
-    int iNbItem    = 0;
-    int* piOffset   = NULL;
-    int* piChildAddr = NULL;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
+    /*
+        int iNbItem    = 0;
+        int* piOffset   = NULL;
+        int* piChildAddr = NULL;
 
-    //Does item can be added in the list
-    sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-    if (sciErr.iErr)
-    {
-        addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
-        return sciErr;
-    }
+        //Does item can be added in the list
+        sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
+        if (sciErr.iErr)
+        {
+            addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
+            return sciErr;
+        }
 
-    if (iNbItem < _iItemPos)
-    {
-        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBooleanInList", _iItemPos + 1);
-        return sciErr;
-    }
+        if (iNbItem < _iItemPos)
+        {
+            addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBooleanInList", _iItemPos + 1);
+            return sciErr;
+        }
 
 
-    sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-    if (sciErr.iErr)
-    {
-        addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
-        return sciErr;
-    }
+        sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
+        if (sciErr.iErr)
+        {
+            addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
+            return sciErr;
+        }
 
-    sciErr = fillMatrixOfBoolean(_pvCtx, piChildAddr, _iRows, _iCols, _piBool);
-    if (sciErr.iErr)
-    {
-        addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
-        return sciErr;
-    }
+        sciErr = fillMatrixOfBoolean(_pvCtx, piChildAddr, _iRows, _iCols, _piBool);
+        if (sciErr.iErr)
+        {
+            addErrorMessage(&sciErr, API_ERROR_FILL_BOOLEAN_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createMatrixOfBoolInList", _iItemPos + 1);
+            return sciErr;
+        }
 
-    piOffset      = _piParent + 2;
-    piOffset[_iItemPos] = piOffset[_iItemPos - 1] + ((3 + _iRows * _iCols + !((_iRows * _iCols) % 2)) / 2);
+        piOffset      = _piParent + 2;
+        piOffset[_iItemPos] = piOffset[_iItemPos - 1] + ((3 + _iRows * _iCols + !((_iRows * _iCols) % 2)) / 2);
 
-*/    return sciErr;
+    */
+    return sciErr;
 }
 
 SciErr createMatrixOfBooleanInNamedList(void* _pvCtx, const char* _pstName, int* /*_piParent*/, int _iItemPos, int _iRows, int _iCols, const int* _piBool)
@@ -1074,7 +1116,9 @@ SciErr createMatrixOfBooleanInNamedList(void* _pvCtx, const char* _pstName, int*
 
 SciErr readMatrixOfBooleanInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piBool)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr    = NULL;
     int* piRoot    = NULL;
     int iNbItem    = 0;
@@ -1136,7 +1180,9 @@ SciErr getComplexMatrixOfPolyInList(void* _pvCtx, int* _piParent, int _iItemPos,
 
 SciErr getCommonMatrixOfPolyInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal, double** _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr  = NULL;
 
     sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
@@ -1168,7 +1214,9 @@ SciErr createComplexMatrixOfPolyInList(void* _pvCtx, int _iVar, int* _piParent,
 
 SciErr createCommonMatrixOfPolyInList(void* _pvCtx, int _iVar, int* /*_piParent*/, int _iItemPos, char* _pstVarName, int _iComplex, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg)
 {
-    SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piItemAddr = NULL;
     int *piEnd      = NULL;
     int iItemLen    = 0;
@@ -1176,14 +1224,14 @@ SciErr createCommonMatrixOfPolyInList(void* _pvCtx, int _iVar, int* /*_piParent*
     int* piParent   = getLastListAddress(_iVar, _iItemPos);
 
     sciErr = getListItemAddress(_pvCtx, piParent, _iItemPos, &piItemAddr);
-    if(sciErr.iErr)
+    if (sciErr.iErr)
     {
         addErrorMessage(&sciErr, API_ERROR_CREATE_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
         return sciErr;
     }
 
     sciErr = fillCommonMatrixOfPolyInList(_pvCtx, _iVar, piParent, _iItemPos, _pstVarName, _iComplex, _iRows, _iCols, _piNbCoef, _pdblReal, _pdblImg, &iTotalLen);
-    if(sciErr.iErr)
+    if (sciErr.iErr)
     {
         addErrorMessage(&sciErr, API_ERROR_CREATE_POLY_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexMatrixOfPolyInList" : "createMatrixOfPolyInList", _iItemPos + 1);
         return sciErr;
@@ -1192,7 +1240,7 @@ SciErr createCommonMatrixOfPolyInList(void* _pvCtx, int _iVar, int* /*_piParent*
     iItemLen      = 9 + _iRows * _iCols + (9 + _iRows * _iCols) % 2;
     iItemLen      += iTotalLen;
     piEnd        = piItemAddr + iItemLen;
-    if(_iItemPos == piParent[1])
+    if (_iItemPos == piParent[1])
     {
         updateListOffset(_pvCtx, _iVar, piParent, _iItemPos, piEnd);
         popListAddress(_iVar);
@@ -1205,7 +1253,9 @@ SciErr createCommonMatrixOfPolyInList(void* _pvCtx, int _iVar, int* /*_piParent*
 
 static SciErr fillCommonMatrixOfPolyInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, char* _pstVarName, int _iComplex, int _iRows, int _iCols, const int* _piNbCoef, const double* const* _pdblReal, const double* const* _pdblImg, int* _piTotalLen)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iNbItem    = 0;
     int iTotalLen   = 0;
     int* piOffset   = NULL;
@@ -1284,7 +1334,9 @@ SciErr readComplexMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, in
 
 SciErr readCommonMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, int* _piNbCoef, double** _pdblReal, double** _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr    = NULL;
     int* piRoot    = NULL;
     int iNbItem    = 0;
@@ -1327,7 +1379,9 @@ SciErr readCommonMatrixOfPolyInNamedList(void* _pvCtx, const char* _pstName, int
 
 static SciErr fillCommonMatrixOfIntegerInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iPrecision, int _iRows, int _iCols, void** _pvData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iNbItem    = 0;
     int* piOffset   = NULL;
     int* piChildAddr = NULL;
@@ -1405,7 +1459,7 @@ SciErr allocMatrixOfUnsignedInteger32InList(void* _pvCtx, int _iVar, int* _piPar
 #ifdef __SCILAB_INT64__
 SciErr allocMatrixOfUnsignedInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, unsigned long long** _pullData)
 {
-       return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, NULL, _piParent, _iItemPos, SCI_UINT64, _iRows, _iCols, (void**)_pullData);
+    return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, NULL, _piParent, _iItemPos, SCI_UINT64, _iRows, _iCols, (void**)_pullData);
 }
 #endif
 
@@ -1427,13 +1481,15 @@ SciErr allocMatrixOfInteger32InList(void* _pvCtx, int _iVar, int* _piParent, int
 #ifdef __SCILAB_INT64__
 SciErr allocMatrixOfInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, long long** _pllData)
 {
-       return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, NULL, _piParent, _iItemPos, SCI_INT64, _iRows, _iCols, (void**)_pllData);
+    return allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, NULL, _piParent, _iItemPos, SCI_INT64, _iRows, _iCols, (void**)_pllData);
 }
 #endif
 
 static SciErr createCommomMatrixOfIntegerInList(void* _pvCtx, int _iVar, const char* _pstName, int* _piParent, int _iItemPos, int _iPrecision, int _iRows, int _iCols, const void* _pvData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     void *pvData = NULL;
 
     sciErr = allocCommonMatrixOfIntegerInList(_pvCtx, _iVar, _pstName, _piParent, _iItemPos, _iPrecision, _iRows, _iCols, &pvData);
@@ -1468,7 +1524,7 @@ SciErr createMatrixOfUnsignedInteger32InList(void* _pvCtx, int _iVar, int* _piPa
 #ifdef __SCILAB_INT64__
 SciErr createMatrixOfUnsignedInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned long long* _pullData)
 {
-       return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, NULL, _piParent, _iItemPos, SCI_UINT64, _iRows, _iCols, _pullData);
+    return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, NULL, _piParent, _iItemPos, SCI_UINT64, _iRows, _iCols, _pullData);
 }
 #endif
 
@@ -1490,13 +1546,15 @@ SciErr createMatrixOfInteger32InList(void* _pvCtx, int _iVar, int* _piParent, in
 #ifdef __SCILAB_INT64__
 SciErr createMatrixOfInteger64InList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iRows, int _iCols, const long long* _pllData)
 {
-       return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, NULL, _piParent, _iItemPos, SCI_INT64, _iRows, _iCols, _pllData);
+    return createCommomMatrixOfIntegerInList(_pvCtx, _iVar, NULL, _piParent, _iItemPos, SCI_INT64, _iRows, _iCols, _pllData);
 }
 #endif
 
 static SciErr getCommonMatrixOfIntegerInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iPrecision, int* _piRows, int* _piCols, void** _pvData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr  = NULL;
 
     sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
@@ -1534,7 +1592,7 @@ SciErr getMatrixOfUnsignedInteger32InList(void* _pvCtx, int* _piParent, int _iIt
 #ifdef __SCILAB_INT64__
 SciErr getMatrixOfUnsignedInteger64InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned long long** _pullData)
 {
-       return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_UINT64, _piRows, _piCols, (void**)_pullData);
+    return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_UINT64, _piRows, _piCols, (void**)_pullData);
 }
 #endif
 
@@ -1556,7 +1614,7 @@ SciErr getMatrixOfInteger32InList(void* _pvCtx, int* _piParent, int _iItemPos, i
 #ifdef __SCILAB_INT64__
 SciErr getMatrixOfInteger64InList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, long long** _pllData)
 {
-       return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_INT64, _piRows, _piCols, (void**)_pllData);
+    return getCommonMatrixOfIntegerInList(_pvCtx, _piParent, _iItemPos, SCI_INT64, _piRows, _piCols, (void**)_pllData);
 }
 #endif
 
@@ -1588,7 +1646,7 @@ SciErr createMatrixOfUnsignedInteger32InNamedList(void* _pvCtx, const char* _pst
 #ifdef __SCILAB_INT64__
 SciErr createMatrixOfUnsignedInteger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const unsigned long long* _pullData)
 {
-       return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT64, _iRows, _iCols, _pullData);
+    return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT64, _iRows, _iCols, _pullData);
 }
 #endif
 
@@ -1610,13 +1668,15 @@ SciErr createMatrixOfInteger32InNamedList(void* _pvCtx, const char* _pstName, in
 #ifdef __SCILAB_INT64__
 SciErr createMatrixOfInteger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iRows, int _iCols, const long long* _pllData)
 {
-       return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT64, _iRows, _iCols, _pllData);
+    return createCommonMatrixOfIntegerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT64, _iRows, _iCols, _pllData);
 }
 #endif
 
 static SciErr readCommonMatrixOfIntgerInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iPrecision, int* _piRows, int* _piCols, void* _pvData)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iNbItem    = 0;
     int* piAddr    = NULL;
     int* piRoot    = NULL;
@@ -1678,7 +1738,7 @@ SciErr readMatrixOfUnsignedInteger32InNamedList(void* _pvCtx, const char* _pstNa
 #ifdef __SCILAB_INT64__
 SciErr readMatrixOfUnsignedInteger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, unsigned long long* _pullData)
 {
-       return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT64, _piRows, _piCols, _pullData);
+    return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_UINT64, _piRows, _piCols, _pullData);
 }
 #endif
 
@@ -1700,7 +1760,7 @@ SciErr readMatrixOfIntger32InNamedList(void* _pvCtx, const char* _pstName, int*
 #ifdef __SCILAB_INT64__
 SciErr readMatrixOfIntger64InNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, long long* _pllData)
 {
-       return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT64, _piRows, _piCols, _pllData);
+    return readCommonMatrixOfIntgerInNamedList(_pvCtx, _pstName, _piParent, _iItemPos, SCI_INT64, _piRows, _piCols, _pllData);
 }
 #endif
 
@@ -1710,108 +1770,17 @@ SciErr readMatrixOfIntger64InNamedList(void* _pvCtx, const char* _pstName, int*
 
 static SciErr fillCommonSparseMatrixInList(void* _pvCtx, int _iVar, int* _piParent, int _iItemPos, int _iComplex, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg, int* _piTotalSize)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-    int iNbItem    = 0;
-    int iTotalLen   = 0;
-    int* piOffset   = NULL;
-    int* piNbItemRow = NULL;
-    int* piColPos   = NULL;
-    int* piChildAddr = NULL;
-    double* pdblReal = NULL;
-    double* pdblImg  = NULL;
-
-    int iItemLen   = 0;
-
-    //Does item can be added in the list
-    sciErr = getListItemNumber(_pvCtx, _piParent, &iNbItem);
-    if (sciErr.iErr)
-    {
-        addErrorMessage(&sciErr, API_ERROR_FILL_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
-        return sciErr;
-    }
-
-    if (iNbItem < _iItemPos)
-    {
-        addErrorMessage(&sciErr, API_ERROR_ITEM_LIST_NUMBER, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createSparseMatrixInNamedList", _iItemPos + 1);
-        return sciErr;
-    }
-
-    sciErr = allocCommonItemInList(_pvCtx, _piParent, _iItemPos, &piChildAddr);
-    if (sciErr.iErr)
-    {
-        addErrorMessage(&sciErr, API_ERROR_FILL_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
-        return sciErr;
-    }
-
-    sciErr = fillCommonSparseMatrix(_pvCtx, piChildAddr, _iComplex, _iRows, _iCols, _iNbItem, &piNbItemRow, &piColPos, &pdblReal, &pdblImg, &iTotalLen);
-    if (sciErr.iErr)
-    {
-        addErrorMessage(&sciErr, API_ERROR_FILL_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
-        return sciErr;
-    }
-
-    piOffset      = _piParent + 2;
-
-    iItemLen      = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
-    iItemLen      += iTotalLen * 2;
-    piOffset[_iItemPos] = piOffset[_iItemPos - 1] + ((iItemLen + 1) / 2);
-
-    memcpy(piNbItemRow, _piNbItemRow, _iRows * sizeof(int));
-    memcpy(piColPos, _piColPos, _iNbItem * sizeof(int));
-
-    memcpy(pdblReal, _pdblReal, _iNbItem * sizeof(double));
-    if (_iComplex)
-    {
-        memcpy(pdblImg, _pdblImg, _iNbItem * sizeof(double));
-    }
-
-    *_piTotalSize = iTotalLen;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     return sciErr;
 }
 
 static SciErr createCommonSparseMatrixInList(void* _pvCtx, int _iVar, const char* _pstName, int* /*_piParent*/, int _iItemPos, int _iComplex, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos, const double* _pdblReal, const double* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
-    int* piAddr     = NULL;
-    int *piEnd      = NULL;
-    int iItemLen    = 0;
-    int iTotalLen   = 0;
-    int* piParent   = NULL;
-
-    if(_pstName)
-    {
-        piParent = getLastNamedListAddress(_pstName, _iItemPos);
-    }
-    else
-    {
-        piParent = getLastListAddress(_iVar, _iItemPos);
-    }
-
-    sciErr = getListItemAddress(_pvCtx, piParent, _iItemPos, &piAddr);
-    if(sciErr.iErr)
-    {
-        addErrorMessage(&sciErr, API_ERROR_CREATE_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
-        return sciErr;
-    }
-
-    sciErr = fillCommonSparseMatrixInList(_pvCtx, _iVar, piParent, _iItemPos, _iComplex, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos, _pdblReal, _pdblImg, &iTotalLen);
-    if(sciErr.iErr)
-    {
-        addErrorMessage(&sciErr, API_ERROR_CREATE_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), _iComplex ? "createComplexSparseMatrixInList" : "createComplexSparseMatrixInList", _iItemPos + 1);
-        return sciErr;
-    }
-
-    iItemLen      = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
-    iItemLen      += iTotalLen * 2;
-    piEnd        = piAddr + iItemLen;
-    if(_iItemPos == piParent[1])
-    {
-        updateListOffset(_pvCtx, _iVar, piParent, _iItemPos, piEnd);
-        popListAddress(_iVar);
-    }
-
-    closeList(_iVar, piEnd);
-
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     return sciErr;
 }
 
@@ -1847,7 +1816,9 @@ SciErr createComplexSparseMatrixInNamedList(void* _pvCtx, const char* _pstName,
 
 static SciErr getCommonSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos, double** _pdblReal, double** _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr  = NULL;
 
     sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
@@ -1879,7 +1850,9 @@ SciErr getComplexSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos,
 
 static SciErr readCommonSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int _iComplex, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos, double* _pdblReal, double* _pdblImg)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iNbItem    = 0;
     int* piAddr    = NULL;
     int* piRoot    = NULL;
@@ -1959,7 +1932,9 @@ SciErr readComplexSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, in
 *****************************/
 static SciErr fillBooleanSparseMatrixInList(void* _pvCtx, int _iVar, const char* _pstName, int* /*_piParent*/, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iNbItem    = 0;
     int* piOffset   = NULL;
     int* piNbItemRow = NULL;
@@ -1969,7 +1944,7 @@ static SciErr fillBooleanSparseMatrixInList(void* _pvCtx, int _iVar, const char*
 
     int* piParent = NULL;
 
-    if(_pstName)
+    if (_pstName)
     {
         piParent = getLastNamedListAddress(_pstName, _iItemPos);
     }
@@ -2019,21 +1994,23 @@ static SciErr fillBooleanSparseMatrixInList(void* _pvCtx, int _iVar, const char*
 
 SciErr createBooleanSparseMatrixInList(void* _pvCtx, int _iVar, int* /*_piParent*/, int _iItemPos, int _iRows, int _iCols, int _iNbItem, const int* _piNbItemRow, const int* _piColPos)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr     = NULL;
     int *piEnd      = NULL;
     int iItemLen    = 0;
     int* piParent   = getLastListAddress(_iVar, _iItemPos);
 
     sciErr = getListItemAddress(_pvCtx, piParent, _iItemPos, &piAddr);
-    if(sciErr.iErr)
+    if (sciErr.iErr)
     {
         addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
         return sciErr;
     }
 
     sciErr = fillBooleanSparseMatrixInList(_pvCtx, _iVar, NULL, piParent, _iItemPos, _iRows, _iCols, _iNbItem, _piNbItemRow, _piColPos);
-    if(sciErr.iErr)
+    if (sciErr.iErr)
     {
         addErrorMessage(&sciErr, API_ERROR_CREATE_BOOLEAN_SPARSE_IN_LIST, _("%s: Unable to create list item #%d in Scilab memory"), "createBooleanSparseMatrixInList", _iItemPos + 1);
         return sciErr;
@@ -2041,7 +2018,7 @@ SciErr createBooleanSparseMatrixInList(void* _pvCtx, int _iVar, int* /*_piParent
 
     iItemLen      = 5 + _iRows + _iNbItem + !((_iRows + _iNbItem) % 2);
     piEnd        = piAddr + iItemLen;
-    if(_iItemPos == piParent[1])
+    if (_iItemPos == piParent[1])
     {
         updateListOffset(_pvCtx, _iVar, piParent, _iItemPos, piEnd);
         popListAddress(_iVar);
@@ -2064,7 +2041,9 @@ SciErr createBooleanSparseMatrixInNamedList(void* _pvCtx, const char* _pstName,
 
 SciErr getBooleanSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int** _piNbItemRow, int** _piColPos)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr  = NULL;
 
     sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
@@ -2086,7 +2065,9 @@ SciErr getBooleanSparseMatrixInList(void* _pvCtx, int* _piParent, int _iItemPos,
 
 SciErr readBooleanSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, int* _piRows, int* _piCols, int* _piNbItem, int* _piNbItemRow, int* _piColPos)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iNbItem    = 0;
     int* piAddr    = NULL;
     int* piRoot    = NULL;
@@ -2142,7 +2123,9 @@ SciErr readBooleanSparseMatrixInNamedList(void* _pvCtx, const char* _pstName, in
 *********************/
 SciErr getPointerInList(void* _pvCtx, int* _piParent, int _iItemPos, void** _pvPtr)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int* piAddr  = NULL;
 
     sciErr = getListItemAddress(_pvCtx, _piParent, _iItemPos, &piAddr);
@@ -2164,14 +2147,18 @@ SciErr getPointerInList(void* _pvCtx, int* _piParent, int _iItemPos, void** _pvP
 
 SciErr createPointerInList(void* _pvCtx, int _iVar, int* /*_piParent*/, int _iItemPos, void* _pvPtr)
 {
-    SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     // FIXME
     return sciErr;
 }
 
 SciErr readPointerInNamedList(void* _pvCtx, const char* _pstName, int* _piParent, int _iItemPos, void** _pvPtr)
 {
-       SciErr sciErr; sciErr.iErr = 0; sciErr.iMsgCount = 0;
+    SciErr sciErr;
+    sciErr.iErr = 0;
+    sciErr.iMsgCount = 0;
     int iNbItem    = 0;
     int* piAddr    = NULL;
     int* piRoot    = NULL;
index 2a99066..b11b270 100644 (file)
@@ -85,9 +85,9 @@ types::Function::ReturnValue sci_bool2s(types::typed_list &in, int _iRetCount, t
         size_t iNonZeros = pSpIn->nonZeros();
 
         //coords
-        double* pRows = new double[iNonZeros * 2];
+        int* pRows = new int[iNonZeros * 2];
         pSpIn->outputRowCol(pRows);
-        double* pCols = pRows + iNonZeros;
+        int* pCols = pRows + iNonZeros;
 
         //values
         double* pNonZeroR = new double[iNonZeros];
@@ -96,7 +96,7 @@ types::Function::ReturnValue sci_bool2s(types::typed_list &in, int _iRetCount, t
 
         for (int i = 0; i < iNonZeros; i++)
         {
-            pSpOut->set((int)pRows[i] - 1, (int)pCols[i] - 1, static_cast<double>(pNonZeroR[i] != 0));
+            pSpOut->set(pRows[i] - 1, pCols[i] - 1, static_cast<double>(pNonZeroR[i] != 0));
         }
 
         pOut = pSpOut;
@@ -109,13 +109,13 @@ types::Function::ReturnValue sci_bool2s(types::typed_list &in, int _iRetCount, t
         size_t iNonZeros = pSpbIn ->nbTrue();
 
         //coords
-        double* pRows = new double[iNonZeros * 2];
-        pSpbIn ->outputRowCol(pRows);
-        double* pCols = pRows + iNonZeros;
+        int* pRows = new int[iNonZeros * 2];
+        pSpbIn->outputRowCol(pRows);
+        int* pCols = pRows + iNonZeros;
 
         for (int i = 0; i < iNonZeros; i++)
         {
-            pSpOut->set((int)pRows[i] - 1, (int)pCols[i] - 1, 1);
+            pSpOut->set(pRows[i] - 1, pCols[i] - 1, 1);
         }
 
         pOut = pSpOut;
index 5640b0a..1fa58dc 100644 (file)
@@ -31,15 +31,15 @@ static void getCoordFromIndex(int _iIndex, int* _piIndexes, int* _piDims, int _i
 types::Function::ReturnValue sci_find(types::typed_list &in, int _iRetCount, types::typed_list &out)
 {
     int iMax = -1;
-    if(in.size() > 2)
+    if (in.size() > 2)
     {
         Scierror(77, _("%s: Wrong number of input argument(s): %d to %d expected.\n"), "find", 1, 2);
         return types::Function::Error;
     }
 
-    if(in.size() == 2)
+    if (in.size() == 2)
     {
-        if(in[1]->isDouble() == false || in[1]->getAs<types::Double>()->isScalar() == false || in[1]->getAs<types::Double>()->get(0) <= 0)
+        if (in[1]->isDouble() == false || in[1]->getAs<types::Double>()->isScalar() == false || in[1]->getAs<types::Double>()->get(0) <= 0)
         {
             Scierror(999, _("%s:  Wrong type for input argument #%d: Scalar positive integer expected.\n"), "find", 2);
             return types::Function::Error;
@@ -52,77 +52,81 @@ types::Function::ReturnValue sci_find(types::typed_list &in, int _iRetCount, typ
     int iValues = 0;
 
     types::GenericType* pGT = in[0]->getAs<types::GenericType>();
-    if(in[0]->isGenericType())
+    if (in[0]->isGenericType())
     {
         piIndex = new int[pGT->getSize()];
     }
 
-    if(in[0]->isBool())
+    if (in[0]->isBool())
     {
         types::Bool* pB = in[0]->getAs<types::Bool>();
-        for(int i = 0 ; (iMax == -1 || iValues < iMax) && i < pB->getSize() ; i++)
+        for (int i = 0 ; (iMax == -1 || iValues < iMax) && i < pB->getSize() ; i++)
         {
-            if(pB->get(i))
+            if (pB->get(i))
             {
                 piIndex[iValues] = i;
                 iValues++;
             }
         }
     }
-    else if(in[0]->isDouble())
+    else if (in[0]->isDouble())
     {
         types::Double* pD = in[0]->getAs<types::Double>();
-        for(int i = 0 ; (iMax == -1 || iValues < iMax) && i < pD->getSize() ; i++)
+        for (int i = 0 ; (iMax == -1 || iValues < iMax) && i < pD->getSize() ; i++)
         {
-            if(pD->get(i))
+            if (pD->get(i))
             {
                 piIndex[iValues] = i;
                 iValues++;
             }
         }
     }
-    else if(in[0]->isSparse())
+    else if (in[0]->isSparse())
     {
         types::Sparse* pSP = in[0]->getAs<types::Sparse>();
         int iNNZ = (int)pSP->nonZeros();
         int iRows = pSP->getRows();
-        double* pRows = new double[iNNZ * 2];
-        
+        int* pRows = new int[iNNZ * 2];
         pSP->outputRowCol(pRows);
-        double *pCols = pRows + iNNZ;
+        int *pCols = pRows + iNNZ;
 
-        for(int i = 0 ; (iMax == -1 || iValues < iMax) && i < iNNZ ; i++)
+        for (int i = 0 ; (iMax == -1 || iValues < iMax) && i < iNNZ ; i++)
         {
-            piIndex[iValues] = ((int)pCols[i]-1) * iRows + ((int)pRows[i]-1);
+            piIndex[iValues] = (pCols[i] - 1) * iRows + (pRows[i] - 1);
             iValues++;
         }
+
+        delete[] pRows;
     }
-    else if(in[0]->isSparseBool())
+    else if (in[0]->isSparseBool())
     {
         types::SparseBool* pSB = in[0]->getAs<types::SparseBool>();
         int iNNZ = (int)pSB->nbTrue();
         int iRows = pSB->getRows();
-        double* pRows = new double[iNNZ * 2];
-        
+
+        int* pRows = new int[iNNZ * 2];
         pSB->outputRowCol(pRows);
-        double *pCols = pRows + iNNZ;
+        int* pCols = pRows + iNNZ;
 
-        for(int i = 0 ; (iMax == -1 || iValues < iMax) && i < iNNZ ; i++)
+        for (int i = 0 ; (iMax == -1 || iValues < iMax) && i < iNNZ ; i++)
         {
-            piIndex[iValues] = ((int)pCols[i]-1) * iRows + ((int)pRows[i]-1);
+            piIndex[iValues] = (pCols[i] - 1) * iRows + (pRows[i] - 1);
             iValues++;
         }
+
+        delete[] pRows;
     }
     else
-    {//call overload for other types
+    {
+        //call overload for other types
         std::wstring wstFuncName = L"%"  + in[0]->getShortTypeStr() + L"_find";
         Overload::call(wstFuncName, in, _iRetCount, out, new ExecVisitor());
         return Function::OK;
     }
 
-    if(iValues == 0)
+    if (iValues == 0)
     {
-        for(int i = 0 ; i < _iRetCount ; i++)
+        for (int i = 0 ; i < _iRetCount ; i++)
         {
             out.push_back(Double::Empty());
         }
@@ -135,54 +139,54 @@ types::Function::ReturnValue sci_find(types::typed_list &in, int _iRetCount, typ
         int* piDims = new int[_iRetCount];
         int iDims = _iRetCount;
 
-        if(iDims == iRefDims)
+        if (iDims == iRefDims)
         {
-            for(int i = 0 ; i < iRefDims ; i++)
+            for (int i = 0 ; i < iRefDims ; i++)
             {
                 piDims[i] = piRefDims[i];
             }
         }
-        else if(iDims > iRefDims)
+        else if (iDims > iRefDims)
         {
-            for(int i = 0 ; i < iRefDims ; i++)
+            for (int i = 0 ; i < iRefDims ; i++)
             {
                 piDims[i] = piRefDims[i];
             }
 
-            for(int i = iRefDims ; i < iDims ; i++)
+            for (int i = iRefDims ; i < iDims ; i++)
             {
                 piDims[i] = 1;
             }
         }
         else //iDims < iRefDims
         {
-            for(int i = 0 ; i < iDims - 1 ; i++)
+            for (int i = 0 ; i < iDims - 1 ; i++)
             {
                 piDims[i] = piRefDims[i];
             }
 
             piDims[iDims - 1] = 1;
-            for(int i = iDims - 1 ; i < iRefDims ; i++)
+            for (int i = iDims - 1 ; i < iRefDims ; i++)
             {
                 piDims[iDims - 1] *= piRefDims[i];
             }
         }
 
         int** piCoord = new int*[iValues];
-        for(int i = 0 ; i < iValues ; i++)
+        for (int i = 0 ; i < iValues ; i++)
         {
             piCoord[i] = new int[_iRetCount];
         }
 
-        for(int i = 0 ; i < iValues ; i++)
+        for (int i = 0 ; i < iValues ; i++)
         {
             getCoordFromIndex(piIndex[i], piCoord[i], piDims, iDims);
         }
 
-        for(int i = 0 ; i < _iRetCount ; i++)
+        for (int i = 0 ; i < _iRetCount ; i++)
         {
             types::Double* pOut = new Double(1, iValues);
-            for(int j = 0 ; j < iValues ; j++)
+            for (int j = 0 ; j < iValues ; j++)
             {
                 pOut->set(j, piCoord[j][i] + 1);
             }
@@ -190,7 +194,7 @@ types::Function::ReturnValue sci_find(types::typed_list &in, int _iRetCount, typ
         }
 
         delete piDims;
-        for(int i = 0 ; i < iValues ; i++)
+        for (int i = 0 ; i < iValues ; i++)
         {
             delete piCoord[i];
         }
@@ -202,7 +206,7 @@ types::Function::ReturnValue sci_find(types::typed_list &in, int _iRetCount, typ
 static void getCoordFromIndex(int _iIndex, int* _piIndexes, int* _piDims, int _iDims)
 {
     int iMul = 1;
-    for(int i = 0 ; i < _iDims ; i++)
+    for (int i = 0 ; i < _iDims ; i++)
     {
         _piIndexes[i] = (int)(_iIndex / iMul) % _piDims[i];
         iMul *= _piDims[i];
index 6a38f23..64eb9be 100644 (file)
@@ -290,7 +290,6 @@ GATEWAY_C_SOURCES = \
     sci_gateway/c/sci_number_properties.c \
     sci_gateway/c/sci_testmatrix.c \
     sci_gateway/c/sci_nearfloat.c \
-    sci_gateway/c/sci_real.c \
     sci_gateway/c/sci_round.c \
     sci_gateway/c/sci_isequalbitwise.c \
     sci_gateway/c/sci_base2dec.c \
@@ -318,7 +317,6 @@ GATEWAY_FORTRAN_SOURCES =  \
     sci_gateway/fortran/sci_f_number_properties.f \
     sci_gateway/fortran/sci_f_spones.f \
     sci_gateway/fortran/sci_f_nearfloat.f \
-    sci_gateway/fortran/sci_f_real.f \
     sci_gateway/fortran/sci_f_round.f \
     sci_gateway/fortran/sci_f_conj.f
 
@@ -363,7 +361,8 @@ GATEWAY_CXX_SOURCES =  \
     sci_gateway/cpp/sci_min.cpp \
     sci_gateway/cpp/sci_rat.cpp \
     sci_gateway/cpp/sci_triu.cpp \
-    sci_gateway/cpp/sci_tril.cpp
+    sci_gateway/cpp/sci_tril.cpp \
+    sci_gateway/cpp/sci_real.cpp
 
 EISPACK_SOURCES = src/fortran/eispack/balbak.f
 
index 09f4a2a..5781fb8 100644 (file)
@@ -248,7 +248,6 @@ am__objects_7 = libscielementary_functions_la-sci_sqrt.lo \
        libscielementary_functions_la-sci_number_properties.lo \
        libscielementary_functions_la-sci_testmatrix.lo \
        libscielementary_functions_la-sci_nearfloat.lo \
-       libscielementary_functions_la-sci_real.lo \
        libscielementary_functions_la-sci_round.lo \
        libscielementary_functions_la-sci_isequalbitwise.lo \
        libscielementary_functions_la-sci_base2dec.lo \
@@ -259,7 +258,7 @@ am__objects_8 = sci_f_testmatrix.lo sci_f_matrix.lo sci_f_size.lo \
        sci_f_sin.lo sci_f_sqrt.lo sci_f_asin.lo sci_f_sign.lo \
        sci_f_zeros.lo sci_f_ones.lo sci_f_diag.lo \
        sci_f_number_properties.lo sci_f_spones.lo sci_f_nearfloat.lo \
-       sci_f_real.lo sci_f_round.lo sci_f_conj.lo
+       sci_f_round.lo sci_f_conj.lo
 am__objects_9 = libscielementary_functions_la-sci_isequal.lo \
        libscielementary_functions_la-elem_func_gw.lo \
        libscielementary_functions_la-sci_size.lo \
@@ -300,7 +299,8 @@ am__objects_9 = libscielementary_functions_la-sci_isequal.lo \
        libscielementary_functions_la-sci_min.lo \
        libscielementary_functions_la-sci_rat.lo \
        libscielementary_functions_la-sci_triu.lo \
-       libscielementary_functions_la-sci_tril.lo
+       libscielementary_functions_la-sci_tril.lo \
+       libscielementary_functions_la-sci_real.lo
 am_libscielementary_functions_la_OBJECTS = $(am__objects_7) \
        $(am__objects_8) $(am__objects_9)
 libscielementary_functions_la_OBJECTS =  \
@@ -907,7 +907,6 @@ GATEWAY_C_SOURCES = \
     sci_gateway/c/sci_number_properties.c \
     sci_gateway/c/sci_testmatrix.c \
     sci_gateway/c/sci_nearfloat.c \
-    sci_gateway/c/sci_real.c \
     sci_gateway/c/sci_round.c \
     sci_gateway/c/sci_isequalbitwise.c \
     sci_gateway/c/sci_base2dec.c \
@@ -935,7 +934,6 @@ GATEWAY_FORTRAN_SOURCES = \
     sci_gateway/fortran/sci_f_number_properties.f \
     sci_gateway/fortran/sci_f_spones.f \
     sci_gateway/fortran/sci_f_nearfloat.f \
-    sci_gateway/fortran/sci_f_real.f \
     sci_gateway/fortran/sci_f_round.f \
     sci_gateway/fortran/sci_f_conj.f
 
@@ -980,7 +978,8 @@ GATEWAY_CXX_SOURCES = \
     sci_gateway/cpp/sci_min.cpp \
     sci_gateway/cpp/sci_rat.cpp \
     sci_gateway/cpp/sci_triu.cpp \
-    sci_gateway/cpp/sci_tril.cpp
+    sci_gateway/cpp/sci_tril.cpp \
+    sci_gateway/cpp/sci_real.cpp
 
 EISPACK_SOURCES = src/fortran/eispack/balbak.f
 
@@ -1691,13 +1690,6 @@ libscielementary_functions_la-sci_nearfloat.lo: sci_gateway/c/sci_nearfloat.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscielementary_functions_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libscielementary_functions_la-sci_nearfloat.lo `test -f 'sci_gateway/c/sci_nearfloat.c' || echo '$(srcdir)/'`sci_gateway/c/sci_nearfloat.c
 
-libscielementary_functions_la-sci_real.lo: sci_gateway/c/sci_real.c
-@am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscielementary_functions_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libscielementary_functions_la-sci_real.lo -MD -MP -MF $(DEPDIR)/libscielementary_functions_la-sci_real.Tpo -c -o libscielementary_functions_la-sci_real.lo `test -f 'sci_gateway/c/sci_real.c' || echo '$(srcdir)/'`sci_gateway/c/sci_real.c
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libscielementary_functions_la-sci_real.Tpo $(DEPDIR)/libscielementary_functions_la-sci_real.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='sci_gateway/c/sci_real.c' object='libscielementary_functions_la-sci_real.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscielementary_functions_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libscielementary_functions_la-sci_real.lo `test -f 'sci_gateway/c/sci_real.c' || echo '$(srcdir)/'`sci_gateway/c/sci_real.c
-
 libscielementary_functions_la-sci_round.lo: sci_gateway/c/sci_round.c
 @am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscielementary_functions_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libscielementary_functions_la-sci_round.lo -MD -MP -MF $(DEPDIR)/libscielementary_functions_la-sci_round.Tpo -c -o libscielementary_functions_la-sci_round.lo `test -f 'sci_gateway/c/sci_round.c' || echo '$(srcdir)/'`sci_gateway/c/sci_round.c
 @am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libscielementary_functions_la-sci_round.Tpo $(DEPDIR)/libscielementary_functions_la-sci_round.Plo
@@ -2097,6 +2089,13 @@ libscielementary_functions_la-sci_tril.lo: sci_gateway/cpp/sci_tril.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscielementary_functions_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscielementary_functions_la-sci_tril.lo `test -f 'sci_gateway/cpp/sci_tril.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_tril.cpp
 
+libscielementary_functions_la-sci_real.lo: sci_gateway/cpp/sci_real.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscielementary_functions_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscielementary_functions_la-sci_real.lo -MD -MP -MF $(DEPDIR)/libscielementary_functions_la-sci_real.Tpo -c -o libscielementary_functions_la-sci_real.lo `test -f 'sci_gateway/cpp/sci_real.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_real.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscielementary_functions_la-sci_real.Tpo $(DEPDIR)/libscielementary_functions_la-sci_real.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='sci_gateway/cpp/sci_real.cpp' object='libscielementary_functions_la-sci_real.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscielementary_functions_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscielementary_functions_la-sci_real.lo `test -f 'sci_gateway/cpp/sci_real.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_real.cpp
+
 .f.o:
        $(F77COMPILE) -c -o $@ $<
 
@@ -2829,9 +2828,6 @@ sci_f_spones.lo: sci_gateway/fortran/sci_f_spones.f
 sci_f_nearfloat.lo: sci_gateway/fortran/sci_f_nearfloat.f
        $(LIBTOOL)  --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o sci_f_nearfloat.lo `test -f 'sci_gateway/fortran/sci_f_nearfloat.f' || echo '$(srcdir)/'`sci_gateway/fortran/sci_f_nearfloat.f
 
-sci_f_real.lo: sci_gateway/fortran/sci_f_real.f
-       $(LIBTOOL)  --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o sci_f_real.lo `test -f 'sci_gateway/fortran/sci_f_real.f' || echo '$(srcdir)/'`sci_gateway/fortran/sci_f_real.f
-
 sci_f_round.lo: sci_gateway/fortran/sci_f_round.f
        $(LIBTOOL)  --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) -c -o sci_f_round.lo `test -f 'sci_gateway/fortran/sci_f_round.f' || echo '$(srcdir)/'`sci_gateway/fortran/sci_f_round.f
 
index 9859926..28fa3f9 100644 (file)
 #include "gw_elementary_functions.h"
 #include "callFunctionFromGateway.h"
 #include "recursionFunction.h"
-#include "api_scilab.h"
 #include "MALLOC.h"
 
 /*--------------------------------------------------------------------------*/
 static gw_generic_table Tab[] =
 {
-       {NULL, ""}, //abs
-       {NULL, ""}, //real
-       {NULL, ""}, //imag
-       {NULL, ""}, //conj
-       {NULL, ""}, //round
-       {NULL, ""}, //int
-       {NULL, ""}, //size
-       {NULL, ""}, //sum
-       {NULL, ""}, //prod
-       {NULL, ""}, //diag
-       {NULL, ""}, //trui
-       {NULL, ""}, //tril
-       {NULL, ""}, //eye
-       {NULL, ""}, //rand
-       {NULL ,""}, //ones
-       {NULL ,""}, //max
-       {NULL ,""}, //min
-       {NULL ,""}, //kron
-       {NULL ,""}, //kron
-       {NULL ,""}, //kron
-       {NULL ,""}, //kron
-       {NULL ,""}, //sin
-       {NULL ,""}, //cos
-       {NULL ,""}, //atan
-       {NULL ,""}, //exp
-       {NULL ,""}, //sqrt
-       {NULL ,""}, //log
-       {sci_chinesehat,"^"},
-       {NULL, ""}, //sign
-       {NULL, ""}, //clean
-       {NULL, ""}, //floor
-       {NULL, ""}, //ceil
-       {NULL, ""}, //expm
-       {NULL, ""}, //cumsum
-       {NULL, ""}, //cumprod
-       {NULL, ""}, //testmatrix
-       {NULL, ""}, //isreal
-       {NULL, ""}, //frexp
-       {NULL, ""}, //zeros
-       {NULL, ""}, //tan
-       {NULL, ""}, //log1p
-       {NULL, ""}, //imult
-       {NULL, ""}, //asin
-       {NULL, ""}, //acos
-       {NULL, ""}, //number_properties
-       {NULL, ""}, //nearfloat
-       {NULL, ""}, //dsearch
-       {NULL, ""}, //isequal
-       {NULL, ""}, //spones
-       {NULL, ""}, //gsort
-       {NULL, ""}, //isequalbitwise
+    {NULL, ""}, //abs
+    {NULL, ""}, //real
+    {NULL, ""}, //imag
+    {NULL, ""}, //conj
+    {NULL, ""}, //round
+    {NULL, ""}, //int
+    {NULL, ""}, //size
+    {NULL, ""}, //sum
+    {NULL, ""}, //prod
+    {NULL, ""}, //diag
+    {NULL, ""}, //trui
+    {NULL, ""}, //tril
+    {NULL, ""}, //eye
+    {NULL, ""}, //rand
+    {NULL , ""}, //ones
+    {NULL , ""}, //max
+    {NULL , ""}, //min
+    {NULL , ""}, //kron
+    {NULL , ""}, //kron
+    {NULL , ""}, //kron
+    {NULL , ""}, //kron
+    {NULL , ""}, //sin
+    {NULL , ""}, //cos
+    {NULL , ""}, //atan
+    {NULL , ""}, //exp
+    {NULL , ""}, //sqrt
+    {NULL , ""}, //log
+    {sci_chinesehat, "^"},
+    {NULL, ""}, //sign
+    {NULL, ""}, //clean
+    {NULL, ""}, //floor
+    {NULL, ""}, //ceil
+    {NULL, ""}, //expm
+    {NULL, ""}, //cumsum
+    {NULL, ""}, //cumprod
+    {NULL, ""}, //testmatrix
+    {NULL, ""}, //isreal
+    {NULL, ""}, //frexp
+    {NULL, ""}, //zeros
+    {NULL, ""}, //tan
+    {NULL, ""}, //log1p
+    {NULL, ""}, //imult
+    {NULL, ""}, //asin
+    {NULL, ""}, //acos
+    {NULL, ""}, //number_properties
+    {NULL, ""}, //nearfloat
+    {NULL, ""}, //dsearch
+    {NULL, ""}, //isequal
+    {NULL, ""}, //spones
+    {NULL, ""}, //gsort
+    {NULL, ""}, //isequalbitwise
     {NULL, ""}, //rat
     {NULL, ""}, //base2dec
     {NULL, ""} //dec2base
@@ -78,6 +77,6 @@ static gw_generic_table Tab[] =
 /*--------------------------------------------------------------------------*/
 int gw_elementary_functions(void)
 {
-       return 0;
+    return 0;
 }
 /*--------------------------------------------------------------------------*/
diff --git a/scilab/modules/elementary_functions/sci_gateway/c/sci_real.c b/scilab/modules/elementary_functions/sci_gateway/c/sci_real.c
deleted file mode 100644 (file)
index 8ddc60f..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2006 - INRIA - Allan CORNET
- *
- * This file must be used under the terms of the CeCILL.
- * This source file is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at
- * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- *
- */
-/*--------------------------------------------------------------------------*/
-#include <string.h>
-#include "gw_elementary_functions.h"
-#include "MALLOC.h"
-#include "basic_functions.h"
-#include "api_scilab.h"
-#include "Scierror.h"
-
-SciErr real_poly(void* pvApiCtx, int* _piAddress);
-SciErr real_sparse(void* pvApiCtx, int* _piAddress);
-SciErr real_double(void* pvApiCtx, int* _piAddress);
-
-/*--------------------------------------------------------------------------*/
-int sci_real(char *fname, void* pvApiCtx)
-{
-       SciErr sciErr;
-       int iType               = 0;
-       int* piAddr             = NULL;
-
-       CheckRhs(1,1);
-       CheckLhs(1,1);
-
-       sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
-       if(sciErr.iErr)
-       {
-               printError(&sciErr, 0);
-               return 0;
-       }
-
-       sciErr = getVarType(pvApiCtx, piAddr, &iType);
-       if(sciErr.iErr)
-       {
-               printError(&sciErr, 0);
-               return 0;
-       }
-
-       switch(iType)
-       {
-       case sci_matrix :
-               sciErr = real_double(pvApiCtx, piAddr);
-               break;
-       case sci_poly :
-               sciErr = real_poly(pvApiCtx, piAddr);
-               break;
-       case sci_sparse :
-               sciErr = real_sparse(pvApiCtx, piAddr);
-               break;
-       default:
-               OverLoad(1);
-               break;
-       }
-
-       if(sciErr.iErr)
-       {
-               printError(&sciErr, 0);
-               return 0;
-       }
-
-       LhsVar(1) = Rhs + 1;
-       PutLhsVar();
-       return 0;
-}
-
-SciErr real_poly(void* pvApiCtx, int* _piAddress)
-{
-       SciErr sciErr;
-       int i,j;
-       int iRows                                                       = 0;
-       int iCols                                                       = 0;
-       int iLen                                                        = 0;
-       int *piCoeff                                    = NULL;
-       char* pstVarName                        = NULL;
-
-       double** pdblReal                       = NULL;
-       double** pdblImg                        = NULL;
-       double** pdblRealRet    = NULL;
-
-       sciErr = getPolyVariableName(pvApiCtx, _piAddress, pstVarName, &iLen);
-       if(sciErr.iErr)
-       {
-               return sciErr;
-       }
-
-       pstVarName = (char*)MALLOC(sizeof(char) * (iLen + 1));
-
-       sciErr = getPolyVariableName(pvApiCtx, _piAddress, pstVarName, &iLen);
-       if(sciErr.iErr)
-       {
-               return sciErr;
-       }
-
-       if(isVarComplex(pvApiCtx, _piAddress))
-       {
-               sciErr = getComplexMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, NULL, NULL, NULL);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-
-               piCoeff = (int*)malloc(iRows * iCols * sizeof(int));
-               sciErr = getComplexMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, piCoeff, NULL, NULL);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-
-               pdblReal                = (double**)malloc(sizeof(double*) * iRows * iCols);
-               pdblImg                 = (double**)malloc(sizeof(double*) * iRows * iCols);
-
-               for(i = 0 ; i < iRows * iCols ; i++)
-               {
-                       pdblReal[i]                     = (double*)malloc(sizeof(double) * piCoeff[i]);
-                       pdblImg[i]                      = (double*)malloc(sizeof(double) * piCoeff[i]);
-               }
-
-               sciErr = getComplexMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, piCoeff, pdblReal, pdblImg);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-
-               for(i = 0 ; i < iRows * iCols ; i++)
-               {
-                       int iCoeff = piCoeff[i];
-                       for(j = iCoeff - 1 ; j >= 0 ; j--)
-                       {
-                               if(pdblReal[i][j] == 0)
-                               {
-                                       piCoeff[i]--;
-                               }
-                               else
-                               {
-                                       break;
-                               }
-                       }
-               }
-
-               sciErr = createMatrixOfPoly(pvApiCtx, Rhs + 1, pstVarName, iRows, iCols, piCoeff, pdblReal);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-       }
-       else
-       {
-               sciErr  = getMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, NULL, NULL);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-
-               piCoeff = (int*)malloc(iRows * iCols * sizeof(int));
-               sciErr = getMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, piCoeff, NULL);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-
-               pdblReal = (double**)malloc(sizeof(double*) * iRows * iCols);
-
-               for(i = 0 ; i < iRows * iCols ; i++)
-               {
-                       pdblReal[i] = (double*)malloc(sizeof(double) * piCoeff[i]);
-               }
-
-               sciErr = getMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, piCoeff, pdblReal);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-
-               sciErr = createMatrixOfPoly(pvApiCtx, Rhs + 1, pstVarName, iRows, iCols, piCoeff, pdblReal);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-       }
-       return sciErr;
-}
-
-SciErr real_sparse(void* pvApiCtx, int* _piAddress)
-{
-       SciErr sciErr;
-       int i,j,x,y;
-       int iRows                                               = 0;
-       int iCols                                               = 0;
-       int iNbItem                                     = 0;
-       int *piNbItemRow                = NULL;
-       int *piColPos                           = NULL;
-
-       int iNbItemNew                  = 0;
-       int* piNbItemRowNew     = NULL;
-       int* piColPosNew                = NULL;
-
-       double *pdblReal                = 0;
-       double *pdblImg                 = 0;
-       double *pdblRealRet     = NULL;
-
-       if(isVarComplex(pvApiCtx, _piAddress))
-       {
-               sciErr = getComplexSparseMatrix(pvApiCtx, _piAddress, &iRows, &iCols, &iNbItem, &piNbItemRow, &piColPos, &pdblReal, &pdblImg);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-
-               for(i = 0 ; i < iNbItem ; i++)
-               {
-                       if(pdblReal[i] != 0)
-                       {
-                               iNbItemNew++;
-                       }
-               }
-
-               sciErr = allocSparseMatrix(pvApiCtx, Rhs + 1, iRows, iCols, iNbItemNew, &piNbItemRowNew, &piColPosNew, &pdblRealRet);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-
-               x = 0;
-               y = 0;
-               for(i = 0 ; i < iRows ; i++)
-               {
-                       piNbItemRowNew[i] = 0;
-                       for(j = 0 ; j < piNbItemRow[i] ; j++)
-                       {
-                               if(pdblReal[x] != 0)
-                               {
-                                       piNbItemRowNew[i]++;
-                                       piColPosNew[y] = piColPos[x];
-                                       pdblRealRet[y] = pdblReal[x];
-                                       y++;
-                               }
-                               x++;
-                       }
-               }
-       }
-       else
-       {
-               sciErr = getSparseMatrix(pvApiCtx, _piAddress, &iRows, &iCols, &iNbItem, &piNbItemRow, &piColPos, &pdblReal);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-
-               sciErr = createSparseMatrix(pvApiCtx, Rhs + 1, iRows, iCols, iNbItem, piNbItemRow, piColPos, pdblReal);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-       }
-       return sciErr;
-}
-
-SciErr real_double(void* pvApiCtx, int* _piAddress)
-{
-       SciErr sciErr;
-       int iRows                                               = 0;
-       int iCols                                               = 0;
-       double *pdblReal                = NULL;
-       double *pdblImg                 = NULL;
-       double *pdblRealRet = NULL;
-
-       if(isVarComplex(pvApiCtx, _piAddress))
-       {
-               sciErr = getComplexMatrixOfDouble(pvApiCtx, _piAddress, &iRows, &iCols, &pdblReal, &pdblImg);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-       }
-       else
-       {
-               sciErr = getMatrixOfDouble(pvApiCtx, _piAddress, &iRows, &iCols, &pdblReal);
-               if(sciErr.iErr)
-               {
-                       return sciErr;
-               }
-       }
-
-       sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, iRows, iCols, pdblReal);
-       if(sciErr.iErr)
-       {
-               return sciErr;
-       }
-
-       return sciErr;
-}
-/*--------------------------------------------------------------------------*/
index 7372096..bf9ae1e 100644 (file)
@@ -209,7 +209,6 @@ lib /DEF:"$(ProjectDir)elementary_functions_Import.def" /SUBSYSTEM:WINDOWS /MACH
     <ClCompile Include="..\..\c\sci_isequalbitwise.c" />
     <ClCompile Include="..\..\c\sci_nearfloat.c" />
     <ClCompile Include="..\..\c\sci_number_properties.c" />
-    <ClCompile Include="..\..\c\sci_real.c" />
     <ClCompile Include="..\..\c\sci_round.c" />
     <ClCompile Include="..\..\c\sci_sign.c" />
     <ClCompile Include="..\..\c\sci_sqrt.c" />
@@ -257,6 +256,7 @@ lib /DEF:"$(ProjectDir)elementary_functions_Import.def" /SUBSYSTEM:WINDOWS /MACH
     <ClCompile Include="..\sci_tril.cpp" />
     <ClCompile Include="..\sci_triu.cpp" />
     <ClCompile Include="..\sci_zeros.cpp" />
+    <ClCompile Include="..\sci_real.cpp" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\..\includes\dynlib_elementary_functions_gw.h" />
@@ -339,4 +339,4 @@ lib /DEF:"$(ProjectDir)elementary_functions_Import.def" /SUBSYSTEM:WINDOWS /MACH
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
\ No newline at end of file
+</Project>
index 349bc13..e62d070 100644 (file)
@@ -51,9 +51,6 @@
     <ClCompile Include="..\..\c\sci_number_properties.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\c\sci_real.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\c\sci_round.c">
       <Filter>Source Files</Filter>
     </ClCompile>
     <ClCompile Include="..\sci_triu.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\sci_real.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\..\includes\elem_func_gw.hxx">
     <Library Include="..\..\..\..\..\bin\lapack.lib" />
     <Library Include="..\..\..\..\..\bin\libintl.lib" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
index 986692a..361e9ad 100644 (file)
@@ -65,9 +65,9 @@ types::Function::ReturnValue sci_ceil(types::typed_list &in, int _iRetCount, typ
         types::Sparse* pSparseOut = new types::Sparse(pSparseIn->getRows(), pSparseIn->getCols(), pSparseIn->isComplex());
 
         int const nonZeros = static_cast<int>(pSparseIn->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         pSparseIn->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
+        int* pCols = pRows + nonZeros;
 
         double* pNonZeroR = new double[nonZeros];
         double* pNonZeroI = new double[nonZeros];
@@ -78,17 +78,19 @@ types::Function::ReturnValue sci_ceil(types::typed_list &in, int _iRetCount, typ
             for (int i = 0; i < nonZeros; i++)
             {
                 std::complex<double> cplx(dceils(pNonZeroR[i]), dceils(pNonZeroI[i]));
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplx);
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplx, false);
             }
         }
         else
         {
             for (int i = 0; i < nonZeros; i++)
             {
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, dceils(pNonZeroR[i]));
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, dceils(pNonZeroR[i]), false);
             }
         }
 
+        pSparseOut->finalize();
+
         delete[] pRows;
         delete[] pNonZeroR;
         delete[] pNonZeroI;
index f660d05..896d947 100644 (file)
@@ -43,8 +43,8 @@ types::Function::ReturnValue sci_clean(types::typed_list &in, int _iRetCount, ty
     int iSize       = 0;
 
     //Only for types::Sparse case
-    double* pRows = NULL;
-    double* pCols = NULL;
+    int* pRows = NULL;
+    int* pCols = NULL;
 
     if (in.size() < 1 || in.size() > 3)
     {
@@ -95,7 +95,7 @@ types::Function::ReturnValue sci_clean(types::typed_list &in, int _iRetCount, ty
         pSparseOut = new types::Sparse(pSparseIn->getRows(), pSparseIn->getCols());
 
         iSize = static_cast<int>(pSparseIn->nonZeros());
-        pRows = new double[iSize * 2];
+        pRows = new int[iSize * 2];
         pSparseIn->outputRowCol(pRows);
         pCols = pRows + iSize;
 
@@ -201,17 +201,19 @@ types::Function::ReturnValue sci_clean(types::typed_list &in, int _iRetCount, ty
             for (int i = 0 ; i < iSize ; i++)
             {
                 std::complex<double> cplx = complex<double>(pdReal[i], pdImg[i]);
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplx);
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplx, false);
             }
         }
         else
         {
             for (int i = 0 ; i < iSize ; i++)
             {
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, pdReal[i]);
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, pdReal[i], false);
             }
         }
 
+        pSparseOut->finalize();
+
         delete[] pdReal;
         delete[] pdImg;
         delete[] pRows;
index 5b3d2f4..5e5425f 100644 (file)
@@ -71,9 +71,9 @@ types::Function::ReturnValue sci_cos(types::typed_list &in, int _iRetCount, type
         types::Double* pDblOut = new types::Double(pSparseIn->getRows(), pSparseIn->getCols(), pSparseIn->isComplex());
 
         int const nonZeros = static_cast<int>(pSparseIn->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         pSparseIn->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
+        int* pCols = pRows + nonZeros;
 
         double* pNonZeroR = new double[nonZeros];
         double* pNonZeroI = new double[nonZeros];
index e3c6e75..88c9127 100644 (file)
@@ -67,9 +67,9 @@ types::Function::ReturnValue sci_exp(types::typed_list &in, int _iRetCount, type
         types::Sparse* pSparseOut = new types::Sparse(pSparseIn->getRows(), pSparseIn->getCols(), pSparseIn->isComplex());
 
         int const nonZeros = static_cast<int>(pSparseIn->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         pSparseIn->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
+        int* pCols = pRows + nonZeros;
 
         double* pNonZeroR = new double[nonZeros];
         double* pNonZeroI = new double[nonZeros];
@@ -83,17 +83,19 @@ types::Function::ReturnValue sci_exp(types::typed_list &in, int _iRetCount, type
                 double dblReal = complex.real();
                 double dblImg = complex.imag();
                 zexps(pNonZeroR[i], pNonZeroI[i], &dblReal, &dblImg);
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, complex);
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, complex, false);
             }
         }
         else
         {
             for (int i = 0; i < nonZeros; i++)
             {
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, dexps(pNonZeroR[i]));
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, dexps(pNonZeroR[i]), false);
             }
         }
 
+        pSparseOut->finalize();
+
         delete[] pRows;
         delete[] pNonZeroR;
         delete[] pNonZeroI;
index dd08d10..b54404d 100644 (file)
@@ -65,9 +65,9 @@ types::Function::ReturnValue sci_floor(types::typed_list &in, int _iRetCount, ty
         types::Sparse* pSparseOut = new types::Sparse(pSparseIn->getRows(), pSparseIn->getCols(), pSparseIn->isComplex());
 
         int const nonZeros = static_cast<int>(pSparseIn->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         pSparseIn->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
+        int* pCols = pRows + nonZeros;
 
         double* pNonZeroR = new double[nonZeros];
         double* pNonZeroI = new double[nonZeros];
@@ -78,17 +78,19 @@ types::Function::ReturnValue sci_floor(types::typed_list &in, int _iRetCount, ty
             for (int i = 0; i < nonZeros; i++)
             {
                 std::complex<double> cplx(dfloors(pNonZeroR[i]), dfloors(pNonZeroI[i]));
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplx);
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplx, false);
             }
         }
         else
         {
             for (int i = 0; i < nonZeros; i++)
             {
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, dfloors(pNonZeroR[i]));
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, dfloors(pNonZeroR[i]), false);
             }
         }
 
+        pSparseOut->finalize();
+
         delete[] pRows;
         delete[] pNonZeroR;
         delete[] pNonZeroI;
index 1ad38c0..11d2221 100644 (file)
@@ -72,16 +72,18 @@ types::Function::ReturnValue sci_imag(types::typed_list &in, int _iRetCount, typ
         }
 
         int const nonZeros = static_cast<int>(pSparseIn->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         pSparseIn->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
+        int* pCols = pRows + nonZeros;
 
         for (int i = 0 ; i < nonZeros ; i++)
         {
             std::complex<double> cplx = pSparseIn->getImg(pRows[i] - 1, pCols[i] - 1);
-            pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplx.imag());
+            pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplx.imag(), false);
         }
 
+        pSparseOut->finalize();
+
         delete[] pRows;
 
         out.push_back(pSparseOut);
index 75466a7..bd90e8a 100644 (file)
@@ -69,26 +69,26 @@ types::Function::ReturnValue sci_imult(types::typed_list &in, int _iRetCount, ty
         types::Sparse* pSparseOut = new types::Sparse(pSparseIn->getRows(), pSparseIn->getCols(), true);
 
         int const nonZeros = static_cast<int>(pSparseIn->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         pSparseIn->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
+        int* pCols = pRows + nonZeros;
 
         if (pSparseIn->isComplex())
         {
             for (int i = 0 ; i < nonZeros ; i++)
             {
-                std::complex<double> cplxIn = pSparseIn->getImg((int)pRows[i] - 1, (int)pCols[i] - 1);
+                std::complex<double> cplxIn = pSparseIn->getImg(pRows[i] - 1, pCols[i] - 1);
                 std::complex<double> cplxOut(cplxIn.imag() * -1, cplxIn.real());
-                pSparseOut->set((int)pRows[i] - 1, (int)pCols[i] - 1, cplxOut);
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplxOut);
             }
         }
         else
         {
             for (int i = 0 ; i < nonZeros ; i++)
             {
-                double dReal = pSparseIn->get((int)pRows[i] - 1, (int)pCols[i] - 1);
+                double dReal = pSparseIn->get(pRows[i] - 1, pCols[i] - 1);
                 std::complex<double> cplxOut(0, dReal);
-                pSparseOut->set((int)pRows[i] - 1, (int)pCols[i] - 1, cplxOut);
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplxOut);
             }
         }
 
index 217b890..fa1e042 100644 (file)
@@ -79,9 +79,9 @@ types::Function::ReturnValue sci_int(types::typed_list &in, int _iRetCount, type
         types::Sparse* pSparseOut = new types::Sparse(pSparseIn->getRows(), pSparseIn->getCols(), pSparseIn->isComplex());
 
         int const nonZeros = static_cast<int>(pSparseIn->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         pSparseIn->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
+        int* pCols = pRows + nonZeros;
 
         double* pNonZeroR = new double[nonZeros];
         double* pNonZeroI = new double[nonZeros];
@@ -102,7 +102,7 @@ types::Function::ReturnValue sci_int(types::typed_list &in, int _iRetCount, type
                 }
 
                 std::complex<double> cplx(pNonZeroR[i], pNonZeroI[i]);
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplx);
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, cplx, false);
             }
         }
         else
@@ -114,10 +114,12 @@ types::Function::ReturnValue sci_int(types::typed_list &in, int _iRetCount, type
                     pNonZeroR[i] = (double)(long long int)pNonZeroR[i];
                 }
 
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, pNonZeroR[i]);
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, pNonZeroR[i], false);
             }
         }
 
+        pSparseOut->finalize();
+
         delete[] pRows;
         delete[] pNonZeroR;
         delete[] pNonZeroI;
index d8aa13e..fb97298 100644 (file)
@@ -103,9 +103,9 @@ types::Function::ReturnValue sci_isreal(types::typed_list &in, int _iRetCount, t
         }
 
         int const nonZeros = static_cast<int>(pSparseIn->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         pSparseIn->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
+        int* pCols = pRows + nonZeros;
 
         for (int i = 0 ; i < nonZeros ; i++)
         {
diff --git a/scilab/modules/elementary_functions/sci_gateway/cpp/sci_real.cpp b/scilab/modules/elementary_functions/sci_gateway/cpp/sci_real.cpp
new file mode 100644 (file)
index 0000000..c94e24f
--- /dev/null
@@ -0,0 +1,319 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2006 - INRIA - Allan CORNET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+/*--------------------------------------------------------------------------*/
+#include <string.h>
+#include "sparse.hxx"
+#include "gatewaystruct.hxx"
+
+extern "C"
+{
+#include "gw_elementary_functions.h"
+#include "MALLOC.h"
+#include "basic_functions.h"
+#include "api_scilab.h"
+#include "Scierror.h"
+
+}
+
+SciErr real_poly(void* pvApiCtx, int* _piAddress);
+SciErr real_sparse(void* pvApiCtx, int* _piAddress);
+SciErr real_double(void* pvApiCtx, int* _piAddress);
+
+/*--------------------------------------------------------------------------*/
+int sci_real(char *fname, void* pvApiCtx)
+{
+    SciErr sciErr;
+    int iType          = 0;
+    int* piAddr                = NULL;
+
+    CheckRhs(1, 1);
+    CheckLhs(1, 1);
+
+    sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
+    if (sciErr.iErr)
+    {
+        printError(&sciErr, 0);
+        return 0;
+    }
+
+    sciErr = getVarType(pvApiCtx, piAddr, &iType);
+    if (sciErr.iErr)
+    {
+        printError(&sciErr, 0);
+        return 0;
+    }
+
+    switch (iType)
+    {
+        case sci_matrix :
+            sciErr = real_double(pvApiCtx, piAddr);
+            break;
+        case sci_poly :
+            sciErr = real_poly(pvApiCtx, piAddr);
+            break;
+        case sci_sparse :
+            sciErr = real_sparse(pvApiCtx, piAddr);
+            break;
+        default:
+            OverLoad(1);
+            break;
+    }
+
+    if (sciErr.iErr)
+    {
+        printError(&sciErr, 0);
+        return 0;
+    }
+
+    LhsVar(1) = Rhs + 1;
+    PutLhsVar();
+    return 0;
+}
+
+SciErr real_poly(void* pvApiCtx, int* _piAddress)
+{
+    SciErr sciErr;
+    int i, j;
+    int iRows                                                  = 0;
+    int iCols                                                  = 0;
+    int iLen                                                   = 0;
+    int *piCoeff                                       = NULL;
+    char* pstVarName                   = NULL;
+
+    double** pdblReal                  = NULL;
+    double** pdblImg                   = NULL;
+    double** pdblRealRet       = NULL;
+
+    sciErr = getPolyVariableName(pvApiCtx, _piAddress, pstVarName, &iLen);
+    if (sciErr.iErr)
+    {
+        return sciErr;
+    }
+
+    pstVarName = (char*)MALLOC(sizeof(char) * (iLen + 1));
+
+    sciErr = getPolyVariableName(pvApiCtx, _piAddress, pstVarName, &iLen);
+    if (sciErr.iErr)
+    {
+        return sciErr;
+    }
+
+    if (isVarComplex(pvApiCtx, _piAddress))
+    {
+        sciErr = getComplexMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, NULL, NULL, NULL);
+        if (sciErr.iErr)
+        {
+            return sciErr;
+        }
+
+        piCoeff        = (int*)malloc(iRows * iCols * sizeof(int));
+        sciErr = getComplexMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, piCoeff, NULL, NULL);
+        if (sciErr.iErr)
+        {
+            return sciErr;
+        }
+
+        pdblReal               = (double**)malloc(sizeof(double*) * iRows * iCols);
+        pdblImg                        = (double**)malloc(sizeof(double*) * iRows * iCols);
+
+        for (i = 0 ; i < iRows * iCols ; i++)
+        {
+            pdblReal[i]                        = (double*)malloc(sizeof(double) * piCoeff[i]);
+            pdblImg[i]                 = (double*)malloc(sizeof(double) * piCoeff[i]);
+        }
+
+        sciErr = getComplexMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, piCoeff, pdblReal, pdblImg);
+        if (sciErr.iErr)
+        {
+            return sciErr;
+        }
+
+        for (i = 0 ; i < iRows * iCols ; i++)
+        {
+            int iCoeff = piCoeff[i];
+            for (j = iCoeff - 1 ; j >= 0 ; j--)
+            {
+                if (pdblReal[i][j] == 0)
+                {
+                    piCoeff[i]--;
+                }
+                else
+                {
+                    break;
+                }
+            }
+        }
+
+        sciErr = createMatrixOfPoly(pvApiCtx, Rhs + 1, pstVarName, iRows, iCols, piCoeff, pdblReal);
+        if (sciErr.iErr)
+        {
+            return sciErr;
+        }
+    }
+    else
+    {
+        sciErr  = getMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, NULL, NULL);
+        if (sciErr.iErr)
+        {
+            return sciErr;
+        }
+
+        piCoeff        = (int*)malloc(iRows * iCols * sizeof(int));
+        sciErr = getMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, piCoeff, NULL);
+        if (sciErr.iErr)
+        {
+            return sciErr;
+        }
+
+        pdblReal = (double**)malloc(sizeof(double*) * iRows * iCols);
+
+        for (i = 0 ; i < iRows * iCols ; i++)
+        {
+            pdblReal[i] = (double*)malloc(sizeof(double) * piCoeff[i]);
+        }
+
+        sciErr = getMatrixOfPoly(pvApiCtx, _piAddress, &iRows, &iCols, piCoeff, pdblReal);
+        if (sciErr.iErr)
+        {
+            return sciErr;
+        }
+
+        sciErr = createMatrixOfPoly(pvApiCtx, Rhs + 1, pstVarName, iRows, iCols, piCoeff, pdblReal);
+        if (sciErr.iErr)
+        {
+            return sciErr;
+        }
+    }
+    return sciErr;
+}
+
+SciErr real_sparse(void* pvApiCtx, int* _piAddress)
+{
+    SciErr sciErr;
+
+    types::Sparse* pS = (types::Sparse*)_piAddress;
+    types::Sparse* pSReal = pS->newReal();
+
+    types::GatewayStruct* pStr = (types::GatewayStruct*)pvApiCtx;
+    types::typed_list in = *pStr->m_pIn;
+    types::InternalType** out = pStr->m_pOut;
+
+    int rhs = 1;
+    out[rhs - 1] = pSReal;
+
+    //int i,j,x,y;
+    //int iRows                                                = 0;
+    //int iCols                                                = 0;
+    //int iNbItem                                      = 0;
+    //int *piNbItemRow         = NULL;
+    //int *piColPos                            = NULL;
+
+    //int iNbItemNew                   = 0;
+    //int* piNbItemRowNew      = NULL;
+    //int* piColPosNew         = NULL;
+
+    //double *pdblReal         = 0;
+    //double *pdblImg                  = 0;
+    //double *pdblRealRet      = NULL;
+
+    //if(isVarComplex(pvApiCtx, _piAddress))
+    //{
+    // sciErr = getComplexSparseMatrix(pvApiCtx, _piAddress, &iRows, &iCols, &iNbItem, &piNbItemRow, &piColPos, &pdblReal, &pdblImg);
+    // if(sciErr.iErr)
+    // {
+    //         return sciErr;
+    // }
+
+    // for(i = 0 ; i < iNbItem ; i++)
+    // {
+    //         if(pdblReal[i] != 0)
+    //         {
+    //                 iNbItemNew++;
+    //         }
+    // }
+
+    // sciErr = allocSparseMatrix(pvApiCtx, Rhs + 1, iRows, iCols, iNbItemNew, &piNbItemRowNew, &piColPosNew, &pdblRealRet);
+    // if(sciErr.iErr)
+    // {
+    //         return sciErr;
+    // }
+
+    // x = 0;
+    // y = 0;
+    // for(i = 0 ; i < iRows ; i++)
+    // {
+    //         piNbItemRowNew[i] = 0;
+    //         for(j = 0 ; j < piNbItemRow[i] ; j++)
+    //         {
+    //                 if(pdblReal[x] != 0)
+    //                 {
+    //                         piNbItemRowNew[i]++;
+    //                         piColPosNew[y] = piColPos[x];
+    //                         pdblRealRet[y] = pdblReal[x];
+    //                         y++;
+    //                 }
+    //                 x++;
+    //         }
+    // }
+    //}
+    //else
+    //{
+    // sciErr = getSparseMatrix(pvApiCtx, _piAddress, &iRows, &iCols, &iNbItem, &piNbItemRow, &piColPos, &pdblReal);
+    // if(sciErr.iErr)
+    // {
+    //         return sciErr;
+    // }
+
+    // sciErr = createSparseMatrix(pvApiCtx, Rhs + 1, iRows, iCols, iNbItem, piNbItemRow, piColPos, pdblReal);
+    // if(sciErr.iErr)
+    // {
+    //         return sciErr;
+    // }
+    //}
+    return sciErr;
+}
+
+SciErr real_double(void* pvApiCtx, int* _piAddress)
+{
+    SciErr sciErr;
+    int iRows                                          = 0;
+    int iCols                                          = 0;
+    double *pdblReal           = NULL;
+    double *pdblImg                    = NULL;
+    double *pdblRealRet = NULL;
+
+    if (isVarComplex(pvApiCtx, _piAddress))
+    {
+        sciErr = getComplexMatrixOfDouble(pvApiCtx, _piAddress, &iRows, &iCols, &pdblReal, &pdblImg);
+        if (sciErr.iErr)
+        {
+            return sciErr;
+        }
+    }
+    else
+    {
+        sciErr = getMatrixOfDouble(pvApiCtx, _piAddress, &iRows, &iCols, &pdblReal);
+        if (sciErr.iErr)
+        {
+            return sciErr;
+        }
+    }
+
+    sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, iRows, iCols, pdblReal);
+    if (sciErr.iErr)
+    {
+        return sciErr;
+    }
+
+    return sciErr;
+}
+/*--------------------------------------------------------------------------*/
index 754cb31..ef93151 100644 (file)
@@ -70,9 +70,9 @@ types::Function::ReturnValue sci_sin(types::typed_list &in, int _iRetCount, type
         types::Sparse* pSparseOut = new types::Sparse(pSparseIn->getRows(), pSparseIn->getCols(), pSparseIn->isComplex());
 
         int const nonZeros = static_cast<int>(pSparseIn->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         pSparseIn->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
+        int* pCols = pRows + nonZeros;
 
         double* pNonZeroR = new double[nonZeros];
         double* pNonZeroI = new double[nonZeros];
@@ -86,17 +86,19 @@ types::Function::ReturnValue sci_sin(types::typed_list &in, int _iRetCount, type
                 double dblReal = complex.real();
                 double dblImg = complex.imag();
                 zsins(pNonZeroR[i], pNonZeroI[i], &dblReal, &dblImg);
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, complex);
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, complex, false);
             }
         }
         else
         {
             for (int i = 0 ; i < nonZeros ; i++)
             {
-                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, dsins(pNonZeroR[i]));
+                pSparseOut->set(pRows[i] - 1, pCols[i] - 1, dsins(pNonZeroR[i]), false);
             }
         }
 
+        pSparseOut->finalize();
+
         delete[] pRows;
         delete[] pNonZeroR;
         delete[] pNonZeroI;
index d9cba4a..c3eee52 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup Label="ProjectConfigurations">
     <ProjectConfiguration Include="Debug|Win32">
@@ -279,6 +279,7 @@ lib /DEF:"$(ProjectDir)cacsd_f_Import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platfor
     <ClInclude Include="..\..\includes\exp.h" />
     <ClInclude Include="..\..\includes\finite.h" />
     <ClInclude Include="..\..\includes\getmode.hxx" />
+    <ClInclude Include="..\..\includes\gsort.hxx" />
     <ClInclude Include="..\..\includes\gw_elementary_functions.h" />
     <ClInclude Include="..\..\includes\idmax.h" />
     <ClInclude Include="..\..\includes\idmin.h" />
@@ -340,11 +341,6 @@ lib /DEF:"$(ProjectDir)cacsd_f_Import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platfor
     </ProjectReference>
     <ProjectReference Include="..\..\..\output_stream\src\c\output_stream.vcxproj">
       <Project>{a5911cd7-f8e8-440c-a23e-4843a0636f3a}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="..\..\..\polynomials\src\c\polynomials.vcxproj">
-      <Project>{620d8fa7-3704-438e-bb1e-391c84401a2e}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
     </ProjectReference>
     <ProjectReference Include="..\..\..\types\types.vcxproj">
       <Project>{64e090da-dcb5-4f4d-93d7-e88ddec9c2ef}</Project>
@@ -353,4 +349,4 @@ lib /DEF:"$(ProjectDir)cacsd_f_Import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platfor
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
+</Project>
\ No newline at end of file
index dade92b..52027d2 100644 (file)
     <ClInclude Include="..\..\includes\sci_tools.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\includes\gsort.hxx">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="elementary_functions_f_Import.def">
       <Filter>Resource File</Filter>
     </ResourceCompile>
   </ItemGroup>
-</Project>
+</Project>
\ No newline at end of file
index ac0b2e8..77365f9 100644 (file)
@@ -1120,13 +1120,9 @@ int AddSparseToDouble(Sparse* sp, Double* d, GenericType** pDRes)
         }
 
         int nonZeros = static_cast<int>(sp->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         sp->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
-
-        double* pNonZeroR = new double[nonZeros];
-        double* pNonZeroI = new double[nonZeros];
-        sp->outputValues(pNonZeroR, pNonZeroI);
+        int* pCols = pRows + nonZeros;
 
         if (bComplex1)
         {
@@ -1152,8 +1148,6 @@ int AddSparseToDouble(Sparse* sp, Double* d, GenericType** pDRes)
 
         //clear
         delete[] pRows;
-        delete[] pNonZeroR;
-        delete[] pNonZeroI;
 
         return 0;
     }
@@ -1196,13 +1190,9 @@ int AddSparseToDouble(Sparse* sp, Double* d, GenericType** pDRes)
         pRes->setComplex(bComplex1 | bComplex2);
 
         int nonZeros = static_cast<int>(sp->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         sp->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
-
-        double* pNonZeroR = new double[nonZeros];
-        double* pNonZeroI = new double[nonZeros];
-        sp->outputValues(pNonZeroR, pNonZeroI);
+        int* pCols = pRows + nonZeros;
 
         if (bComplex1)
         {
@@ -1227,8 +1217,6 @@ int AddSparseToDouble(Sparse* sp, Double* d, GenericType** pDRes)
 
         //clear
         delete[] pRows;
-        delete[] pNonZeroR;
-        delete[] pNonZeroI;
         *pDRes = pRes;
         return 0;
     }
index 3a912b0..7982f06 100644 (file)
@@ -1344,9 +1344,9 @@ int MultiplyDoubleBySparse(Double* _pDouble, Sparse *_pSparse, GenericType** _pO
 
     //get some information
     int iNonZeros = static_cast<int>(_pSparse->nonZeros());
-    double* pRows = new double[iNonZeros * 2];
+    int* pRows = new int[iNonZeros * 2];
     _pSparse->outputRowCol(pRows);
-    double* pCols = pRows + iNonZeros;
+    int* pCols = pRows + iNonZeros;
     double* pValR = new double[iNonZeros];
     double* pValI = new double[iNonZeros];
     _pSparse->outputValues(pValR, pValI);
@@ -1482,9 +1482,9 @@ int MultiplySparseByDouble(Sparse *_pSparse, Double*_pDouble, GenericType** _pOu
 
     //get some information
     int iNonZeros = static_cast<int>(_pSparse->nonZeros());
-    double* pRows = new double[iNonZeros * 2];
+    int* pRows = new int[iNonZeros * 2];
     _pSparse->outputRowCol(pRows);
-    double* pCols = pRows + iNonZeros;
+    int* pCols = pRows + iNonZeros;
     double* pValR = new double[iNonZeros];
     double* pValI = new double[iNonZeros];
     _pSparse->outputValues(pValR, pValI);
@@ -1609,9 +1609,9 @@ int DotMultiplyDoubleBySparse(Double* _pDouble, Sparse* _pSparse, GenericType**
     Sparse* pOut = new Sparse(_pDouble->getRows(), _pDouble->getCols(), _pSparse->isComplex() || _pDouble->isComplex());
     //get some information
     int iNonZeros = static_cast<int>(_pSparse->nonZeros());
-    double* pRows = new double[iNonZeros * 2];
+    int* pRows = new int[iNonZeros * 2];
     _pSparse->outputRowCol(pRows);
-    double* pCols = pRows + iNonZeros;
+    int* pCols = pRows + iNonZeros;
 
     if (_pDouble->isComplex() == false && _pSparse->isComplex() == false)
     {
index 95e9d25..8d81da6 100644 (file)
@@ -673,28 +673,6 @@ int SparseBoolLogicalAndSparseBool(InternalType* _pL, InternalType*  _pR, Intern
     {
         *_pOut = pL->newLogicalAnd(*pR);
         return 0;
-        /*
-        int nbTrueL = static_cast<int>(_pL->nbTrue());
-        double* pLRows = new double[nbTrueL * 2];
-        _pL->outputRowCol(pLRows);
-        double* pLCols = pLRows + nbTrueL;
-
-        int nbTrueR = static_cast<int>(_pR->nbTrue());
-        double* pRRows = new double[nbTrueR * 2];
-        _pR->outputRowCol(pRRows);
-        double* pRCols = pRRows + nbTrueR;
-
-        *_pOut = new SparseBool(_pR->getRows(), _pL->getCols());
-        (*_pOut)->no
-        for(int i = 0 ; i < nbTrueL ; i++)
-        {
-            if(_pL->get(pLRows[i], pLRows[i]) == _pR->get(pLRows[i], pLRows[i]))
-            {//set 1
-                (*_pOut)->set(pLRows[i], pLRows[i], true);
-            }
-
-        }
-        */
     }
 
     return 1;
index 31879cf..7a34186 100644 (file)
@@ -1227,13 +1227,9 @@ int SubstractSparseToDouble(Sparse* _pSparse, Double* _pDouble, GenericType **_p
         }
 
         int nonZeros = static_cast<int>(_pSparse->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         _pSparse->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
-
-        double* pNonZeroR = new double[nonZeros];
-        double* pNonZeroI = new double[nonZeros];
-        _pSparse->outputValues(pNonZeroR, pNonZeroI);
+        int* pCols = pRows + nonZeros;
 
         if (bComplex1)
         {
@@ -1259,9 +1255,6 @@ int SubstractSparseToDouble(Sparse* _pSparse, Double* _pDouble, GenericType **_p
 
         //clear
         delete[] pRows;
-        delete[] pNonZeroR;
-        delete[] pNonZeroI;
-
         return 0;
     }
 
@@ -1302,13 +1295,9 @@ int SubstractSparseToDouble(Sparse* _pSparse, Double* _pDouble, GenericType **_p
         pRes->setComplex(bComplex1 | bComplex2);
 
         int nonZeros = static_cast<int>(_pSparse->nonZeros());
-        double* pRows = new double[nonZeros * 2];
+        int* pRows = new int[nonZeros * 2];
         _pSparse->outputRowCol(pRows);
-        double* pCols = pRows + nonZeros;
-
-        double* pNonZeroR = new double[nonZeros];
-        double* pNonZeroI = new double[nonZeros];
-        _pSparse->outputValues(pNonZeroR, pNonZeroI);
+        int* pCols = pRows + nonZeros;
 
         if (bComplex1)
         {
@@ -1333,8 +1322,6 @@ int SubstractSparseToDouble(Sparse* _pSparse, Double* _pDouble, GenericType **_p
 
         //clear
         delete[] pRows;
-        delete[] pNonZeroR;
-        delete[] pNonZeroI;
         *_pOut = pRes;
         return 0;
     }
index d7b2a58..0e07805 100644 (file)
@@ -46,7 +46,7 @@ GenericType* buildSparse(Double CONST& indices, DenseType CONST& vals, Double CO
         }
 
         //can create an empty sparse matrix
-        return new Sparse(pDim->get(0), pDim->get(1));
+        return new Sparse((int)pDim->get(0), (int)pDim->get(1));
     }
 
     if (indices.getRows() != vals.getSize() || (indices.getCols() != 2 && indices.getCols() != 0))
index 0102cca..140d614 100644 (file)
@@ -38,7 +38,7 @@ void spcompack(int neqns, int nsuper, int nsub, int nnz, XlindxIt xlindx
         if (!(((*(xlnz + j) - * (xlnz + j - 1)) == (*(xlindx + i) - * (xlindx + i - 1)))
                 && (*(adjncy + static_cast<AdjDiff_t>(*(xlnz + j - 1)) - 1) == j)))
         {
-            std::size_t const l(*(xlindx + nsuper) - * (xlindx + i - 1) + (*(xlnz + j) - * (xlnz + j - 1)));
+            std::size_t const l((int) * (xlindx + nsuper) - (int) * (xlindx + i - 1) + ((int) * (xlnz + j) - (int) * (xlnz + j - 1)));
             LindxIt const tmp(lindx + static_cast<LindxDiff_t>(*(xlindx + i - 1) - (*(xlnz + j) - * (xlnz + j - 1))) - 1);
             std::copy(tmp, tmp + l, adjncy + static_cast<AdjDiff_t>(*(xlnz + j - 1)) - 1);
             --i;
@@ -46,14 +46,14 @@ void spcompack(int neqns, int nsuper, int nsub, int nnz, XlindxIt xlindx
     }
     if (i == nsuper + 1)
     {
-        int const k(*(xlnz + neqns) - * (xlnz + j - 1));
+        int const k((int) * (xlnz + neqns) - (int) * (xlnz + j - 1));
         i = 1;
         int ii = 1;
         while (i <= k)
         {
             for (j = 1; j <= ii; ++j, ++i)
             {
-                *(adjncy + static_cast<AdjDiff_t>(*(xlnz + neqns)) - i - 1) = neqns - j + 1;
+                *(adjncy + static_cast<AdjDiff_t>((int) * (xlnz + neqns)) - i - 1) = (double)(neqns - j + 1);
             }
             ++ii;
         }
@@ -95,11 +95,11 @@ Function::ReturnValue sci_spcompack(typed_list &in, int nbRes, typed_list &out)
     double const*const lindx    = in[2]->getAs<Double>()->getReal();
     std::size_t const nSuper    = in[2]->getAs<Double>()->getSize();
 
-    std::size_t const nnz = xadj[nEqns - 1] - 1;
-    types::Double* const pAdjncy = new types::Double(nnz, 1);
+    std::size_t const nnz = (std::size_t)xadj[nEqns - 1] - 1;
+    types::Double* const pAdjncy = new types::Double((int)nnz, 1);
     double* const adjncy(pAdjncy->getReal());
 
-    spcompack(nEqns - 1, nbSub - 1,  nSuper - 1, nnz - 1, xlindx, lindx, xadj, adjncy);
+    spcompack((int)nEqns - 1, (int)nbSub - 1,  (int)nSuper - 1, (int)nnz - 1, xlindx, lindx, xadj, adjncy);
     out.push_back(pAdjncy);
     return Function::OK;
 }
index 6d84bc1..b69ea3f 100644 (file)
@@ -32,7 +32,7 @@ types::Function::ReturnValue sci_spget(types::typed_list &in, int _iRetCount, ty
     int iCols           = 0;
     bool bComplex       = false;
     int nonZeros        = 0;
-    double* pRows       = NULL;
+    int* pRows       = NULL;
     double* pNonZeroR   = NULL;
     double* pNonZeroI   = NULL;
 
@@ -66,7 +66,7 @@ types::Function::ReturnValue sci_spget(types::typed_list &in, int _iRetCount, ty
             return types::Function::OK;
         }
 
-        pRows = new double[nonZeros * 2];
+        pRows = new int[nonZeros * 2];
         sp->outputRowCol(pRows);
 
         if (_iRetCount > 1)
@@ -108,7 +108,7 @@ types::Function::ReturnValue sci_spget(types::typed_list &in, int _iRetCount, ty
         }
 
 
-        pRows = new double[nonZeros * 2];
+        pRows = new int[nonZeros * 2];
         sp->outputRowCol(pRows);
 
         iRows = sp->getRows();
@@ -129,7 +129,7 @@ types::Function::ReturnValue sci_spget(types::typed_list &in, int _iRetCount, ty
     }
 
     types::Double* pCoord = new types::Double(nonZeros, 2);
-    pCoord->set(pRows);
+    pCoord->setInt(pRows);
 
     if (_iRetCount > 1)
     {
index 127eadc..61b5107 100644 (file)
@@ -68,7 +68,7 @@ types::Function::ReturnValue sci_spzeros(types::typed_list &in, int _iRetCount,
             return types::Function::Error;
         }
 
-        pSpOut = new types::Sparse(pDblRows->get(0), pDblCols->get(0), false);
+        pSpOut = new types::Sparse((int)pDblRows->get(0), (int)pDblCols->get(0), false);
 
     }
     else // in.size() == 1
index a6f6c00..2529c9e 100644 (file)
@@ -1,14 +1,14 @@
- /*
- *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- *  Copyright (C) 2008-2008 - DIGITEO - Bernard HUGUENEY
- *
- *  This file must be used under the terms of the CeCILL.
- *  This source file is licensed as described in the file COPYING, which
- *  you should have received as part of this distribution.  The terms
- *  are also available at
- *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- *
- */
+/*
+*  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+*  Copyright (C) 2008-2008 - DIGITEO - Bernard HUGUENEY
+*
+*  This file must be used under the terms of the CeCILL.
+*  This source file is licensed as described in the file COPYING, which
+*  you should have received as part of this distribution.  The terms
+*  are also available at
+*  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+*
+*/
 #ifndef MATRIXITERATORS_HXX
 #define MATRIXITERATORS_HXX
 
@@ -34,7 +34,7 @@
   an iterator created from such a variable (IteratorFromVar).
  */
 template<typename T>
-    struct UndefinedAccessorForType {};
+struct UndefinedAccessorForType {};
 
 /**
    This free function overloads perform read access into a 2D container, using 0-based indices.
@@ -44,26 +44,68 @@ template<typename T>
    @return : the value of type V at row r and column c of structure s
 */
 
-template<typename V, typename S> V get(S CONST&, int, int){ return UndefinedAccessorForType<S>(); }
+template<typename V, typename S> V get(S CONST&, int, int)
+{
+    return UndefinedAccessorForType<S>();
+}
 
-template<> double get(types::Double CONST& d, int r, int c){ return d.getReal(r, c); }
-template<> std::complex<double> get(types::Double CONST& d, int r, int c){ return std::complex<double>(d.getReal(r, c), d.getImg(r,c)); }
+template<> double get(types::Double CONST& d, int r, int c)
+{
+    return d.getReal(r, c);
+}
+template<> std::complex<double> get(types::Double CONST& d, int r, int c)
+{
+    return std::complex<double>(d.getReal(r, c), d.getImg(r, c));
+}
 
-template<> bool get(types::Bool CONST& d, int r, int c){ return d.get(r, c) == 1; }
-template<> int get(types::Bool CONST& d, int r, int c){ return d.get(r, c); }
-template<> bool get(types::SparseBool CONST& d, int r, int c){ return d.get(r, c); }
-template<> int get(types::SparseBool CONST& d, int r, int c){ return d.get(r, c); }
+template<> bool get(types::Bool CONST& d, int r, int c)
+{
+    return d.get(r, c) == 1;
+}
+template<> int get(types::Bool CONST& d, int r, int c)
+{
+    return d.get(r, c);
+}
+template<> bool get(types::SparseBool CONST& d, int r, int c)
+{
+    return d.get(r, c);
+}
+template<> int get(types::SparseBool CONST& d, int r, int c)
+{
+    return d.get(r, c);
+}
 
-template<> double get(types::Sparse CONST& s, int r, int c){ return s.getReal(r, c); }
-template<> std::complex<double> get(types::Sparse CONST& s, int r, int c){ return s.get(r, c); }
+template<> double get(types::Sparse CONST& s, int r, int c)
+{
+    return s.getReal(r, c);
+}
+template<> std::complex<double> get(types::Sparse CONST& s, int r, int c)
+{
+    return s.get(r, c);
+}
 
-template<> double get(Eigen::SparseMatrix<double, 0, int> CONST&s, int r, int c){ return s.coeff(r, c);}
-template<> std::complex<double> get(Eigen::SparseMatrix<double, 0, int> CONST&s, int r, int c){ return std::complex<double>(s.coeff(r, c), 0.);}
+template<> double get(Eigen::SparseMatrix<double, 0, int> CONST&s, int r, int c)
+{
+    return s.coeff(r, c);
+}
+template<> std::complex<double> get(Eigen::SparseMatrix<double, 0, int> CONST&s, int r, int c)
+{
+    return std::complex<double>(s.coeff(r, c), 0.);
+}
 
-template<> bool get(Eigen::SparseMatrix<bool> CONST& d, int r, int c){ return d.coeff(r, c); }
+template<> bool get(Eigen::SparseMatrix<bool> CONST& d, int r, int c)
+{
+    return d.coeff(r, c);
+}
 
-template<> double get(Eigen::SparseMatrix<std::complex<double>, 0, int> CONST&s, int r, int c){ return s.coeff(r, c).real();}
-template<> std::complex<double> get(Eigen::SparseMatrix<std::complex<double>, 0, int> CONST&s, int r, int c){ return s.coeff(r, c);}
+template<> double get(Eigen::SparseMatrix<std::complex<double>, 0, int> CONST&s, int r, int c)
+{
+    return s.coeff(r, c).real();
+}
+template<> std::complex<double> get(Eigen::SparseMatrix<std::complex<double>, 0, int> CONST&s, int r, int c)
+{
+    return s.coeff(r, c);
+}
 
 
 /**
@@ -76,66 +118,93 @@ template<> std::complex<double> get(Eigen::SparseMatrix<std::complex<double>, 0,
 */
 
 
-template<typename S, typename V> bool set(S &, int, int, V){ return UndefinedAccessorForType<S>(); }
+template<typename S, typename V> bool set(S &, int, int, V)
+{
+    return UndefinedAccessorForType<S>();
+}
 
-template<> bool set(types::Double & d, int r, int c, double v){ return d.set(r, c, v); }
-template<> bool set(types::Double & d, int r, int c, std::complex<double> v){return d.set(r, c, v.real()) && d.setImg(r, c, v.imag());}
+template<> bool set(types::Double & d, int r, int c, double v)
+{
+    return d.set(r, c, v);
+}
+template<> bool set(types::Double & d, int r, int c, std::complex<double> v)
+{
+    return d.set(r, c, v.real()) && d.setImg(r, c, v.imag());
+}
 
-template<> bool set(types::Sparse & s, int r, int c, double v){ return s.set(r, c, v); }
-template<> bool set(types::Sparse & s, int r, int c, std::complex<double> v){ return s.set(r, c, v); }
-template<> bool set(types::Bool & d, int r, int c, bool v){ return d.set(r, c, v); }
-template<> bool set(types::SparseBool & d, int r, int c, bool v){ return d.set(r, c, v); }
-template<> bool set(types::Bool & d, int r, int c, int v){ return d.set(r, c, v); }
-template<> bool set(types::SparseBool & d, int r, int c, int v){ return d.set(r, c, v != 0); }
+template<> bool set(types::Sparse & s, int r, int c, double v)
+{
+    return s.set(r, c, v);
+}
+template<> bool set(types::Sparse & s, int r, int c, std::complex<double> v)
+{
+    return s.set(r, c, v);
+}
+template<> bool set(types::Bool & d, int r, int c, bool v)
+{
+    return d.set(r, c, v);
+}
+template<> bool set(types::SparseBool & d, int r, int c, bool v)
+{
+    return d.set(r, c, v);
+}
+template<> bool set(types::Bool & d, int r, int c, int v)
+{
+    return d.set(r, c, v);
+}
+template<> bool set(types::SparseBool & d, int r, int c, int v)
+{
+    return d.set(r, c, v != 0);
+}
 
 /*
  * TODO report possible bug in Eigen when inserting 0. invalidates Eigen::InnerIterator
  */
 template<> bool set(Eigen::SparseMatrix<double, 0, int>& s, int r, int c, double v)
 {
-    if(v != 0.)
+    if (v != 0.)
     {
-        s.insert(r,c)=v;
+        s.insert(r, c) = v;
     }
     return true;
 }
 
 template<> bool set(Eigen::SparseMatrix<double, 0, int>& s, int r, int c, std::complex<double> v)
 {
-    if( v.real() != 0.)
+    if ( v.real() != 0.)
     {
-        s.insert(r,c)=v.real();
+        s.insert(r, c) = v.real();
     }
     return  true;
 }
 // should we make this a compile error ?
 template<> bool set(Eigen::SparseMatrix<std::complex<double>, 0, int>& s, int r, int c, double v)
 {
-    if(v != 0.)
+    if (v != 0.)
     {
-        s.insert(r,c)=std::complex<double>(v);
+        s.insert(r, c) = std::complex<double>(v);
     }
     return true;
 }
 
 namespace
 {
-    std::complex<double> const cplxZero(0., 0.);
+std::complex<double> const cplxZero(0., 0.);
 }
 template<> bool set(Eigen::SparseMatrix<std::complex<double>, 0, int>& s, int r, int c, std::complex<double> v)
 {
-    if(v != cplxZero)
+    if (v != cplxZero)
     {
-        s.insert(r,c)=v;
+        s.insert(r, c) = v;
     }
     return true;
 }
 
 template<> bool set(Eigen::SparseMatrix<bool>& s, int r, int c, bool v)
 {
-    if(v)
+    if (v)
     {
-        s.insert(r,c)=v;
+        s.insert(r, c) = v;
     }
     return true;
 }
@@ -143,17 +212,47 @@ template<> bool set(Eigen::SparseMatrix<bool>& s, int r, int c, bool v)
 
 
 
-template<typename S> int rows(S CONST&s) { return s.rows();}
-template<typename S> int cols(S CONST&s) { return s.cols();}
+template<typename S> int rows(S CONST&s)
+{
+    return s.rows();
+}
+template<typename S> int cols(S CONST&s)
+{
+    return s.cols();
+}
 
-template<> int rows(types::Double CONST&d) { return d.getRows();}
-template<> int cols(types::Double CONST&d) { return d.getCols();}
-template<> int rows(types::Sparse CONST&s) { return s.getRows();}
-template<> int cols(types::Sparse CONST&s) { return s.getCols();}
-template<> int rows(types::Bool CONST&s) { return s.getRows();}
-template<> int cols(types::Bool CONST&s) { return s.getCols();}
-template<> int rows(types::SparseBool CONST&s) { return s.getRows();}
-template<> int cols(types::SparseBool CONST&s) { return s.getCols();}
+template<> int rows(types::Double CONST&d)
+{
+    return d.getRows();
+}
+template<> int cols(types::Double CONST&d)
+{
+    return d.getCols();
+}
+template<> int rows(types::Sparse CONST&s)
+{
+    return s.getRows();
+}
+template<> int cols(types::Sparse CONST&s)
+{
+    return s.getCols();
+}
+template<> int rows(types::Bool CONST&s)
+{
+    return s.getRows();
+}
+template<> int cols(types::Bool CONST&s)
+{
+    return s.getCols();
+}
+template<> int rows(types::SparseBool CONST&s)
+{
+    return s.getRows();
+}
+template<> int cols(types::SparseBool CONST&s)
+{
+    return s.getCols();
+}
 
 
 
@@ -177,46 +276,47 @@ template<> inline int cols(types::Double CONST&d);
 
 /* this proxy struct provides read and write access (using set and get)
    with the usual operators (operator*() and operator=() )*/
-template<typename S, typename V> struct Accessor{
-/**
-   @param s_ : 2D structure to access
-   @param r_ : row to access
-   @param c_ ; column to access
-*/
+template<typename S, typename V> struct Accessor
+{
+    /**
+       @param s_ : 2D structure to access
+       @param r_ : row to access
+       @param c_ ; column to access
+    */
     Accessor(S& s_, int r_, int c_): s(s_), r(r_), c(c_) {}
-/**
-   read accessor as a casting operator
-   @return : value of s at (r,c)
- */
+    /**
+       read accessor as a casting operator
+       @return : value of s at (r,c)
+     */
     operator V() CONST
     {
-//        std::cerr<<"reading "<<get<S,V>(s, r, c)<<" @("<<r<<","<<c<<")\n";
+        //        std::cerr<<"reading "<<get<S,V>(s, r, c)<<" @("<<r<<","<<c<<")\n";
         return ::get<V>(s, r, c);
     }
-/**
-   write accessor as an assignment operator
-   @param v : value to set at (r,c) in s.
-*/
+    /**
+       write accessor as an assignment operator
+       @param v : value to set at (r,c) in s.
+    */
     template<typename Sa, typename Va>
     Accessor& operator=(Accessor<Sa, Va> const& a)
     {
-//        std::cerr<<"writing "<<( Va(const_cast<Accessor<Sa, Va>&>(a)))<<" @("<<r<<","<<c<<")\n";
-//        Va tmp=const_cast<Accessor<Sa, Va>&>(a);
-//        ::set<S,V>(s, r, c, tmp);
-        ::set<S,V>(s, r, c, Va(const_cast<Accessor<Sa, Va>&>(a)));
+        //        std::cerr<<"writing "<<( Va(const_cast<Accessor<Sa, Va>&>(a)))<<" @("<<r<<","<<c<<")\n";
+        //        Va tmp=const_cast<Accessor<Sa, Va>&>(a);
+        //        ::set<S,V>(s, r, c, tmp);
+        ::set<S, V>(s, r, c, Va(const_cast<Accessor<Sa, Va>&>(a)));
         return *this;
     }
 
     Accessor& operator=(Accessor const& a)
     {
-//        std::cerr<<"writing "<<( V(const_cast<Accessor&>(a)))<<" @("<<r<<","<<c<<")\n";
-        ::set<S,V>(s, r, c, V(const_cast<Accessor&>(a)));
+        //        std::cerr<<"writing "<<( V(const_cast<Accessor&>(a)))<<" @("<<r<<","<<c<<")\n";
+        ::set<S, V>(s, r, c, V(const_cast<Accessor&>(a)));
         return *this;
     }
     Accessor& operator=(V const& v)
     {
-//        std::cerr<<"writing "<<v<<" @("<<r<<","<<c<<")\n";
-        ::set<S,V>(s, r, c, v);
+        //        std::cerr<<"writing "<<v<<" @("<<r<<","<<c<<")\n";
+        ::set<S, V>(s, r, c, v);
         return *this;
     }
 private:
@@ -234,43 +334,44 @@ typedef std::iterator<std::forward_iterator_tag, Coords2D > Coords2DIterator;
  */
 struct RowWiseFullIterator : Coords2DIterator
 {
-/**
-   @param cMax : size of the 2D structure
- */
-    RowWiseFullIterator(Coords2D cMax): c(0,0), cMax(cMax)
+    /**
+       @param cMax : size of the 2D structure
+     */
+    RowWiseFullIterator(Coords2D cMax): c(0, 0), cMax(cMax)
     {
     }
-/**
-   @param cMax : size of the 2D structure
-   @param cInit : starting coords of the traversal.
- */
+    /**
+       @param cMax : size of the 2D structure
+       @param cInit : starting coords of the traversal.
+     */
     RowWiseFullIterator(Coords2D cMax, Coords2D cInit): c(cInit), cMax(cMax)
     {
     }
-/**
-   @param rm : nb of rows of the 2D structure
-   @param cm : nb of column of the 2D structure
- */
-    RowWiseFullIterator(int rm, int cm): c(0,0), cMax(rm, cm)
+    /**
+       @param rm : nb of rows of the 2D structure
+       @param cm : nb of column of the 2D structure
+     */
+    RowWiseFullIterator(int rm, int cm): c(0, 0), cMax(rm, cm)
     {
     }
-/**
-   @param rm : nb of rows of the 2D structure
-   @param cm : nb of column of the 2D structure
-   @param rInit : starting row of the traversal
-   @param cInit : starting column of the traversal
- */
+    /**
+       @param rm : nb of rows of the 2D structure
+       @param cm : nb of column of the 2D structure
+       @param rInit : starting row of the traversal
+       @param cInit : starting column of the traversal
+     */
     RowWiseFullIterator(int rm, int cm, int rInit, int cInit): c(rInit, cInit), cMax(rm, cm)
     {
     }
     RowWiseFullIterator& operator++()
     {
-        if(++c.first == cMax.first)
+        if (++c.first == cMax.first)
         {
-            c.first= 0;
-            if(++c.second == cMax.second)
-            {/* wrap around */
-                c.first= c.second= 0;
+            c.first = 0;
+            if (++c.second == cMax.second)
+            {
+                /* wrap around */
+                c.first = c.second = 0;
             }
         }
         return *this;
@@ -293,23 +394,23 @@ private:
 /**
    Iterator over coords making a row-wise traversal of non zero elements of an Eigen Sparse Matrix
  */
-    template<typename Sp>
+template<typename Sp>
 struct RowWiseSparseIterator : Coords2DIterator
 {
-/**
-   @param sp: sparse matrix for non zero elements traversal
- */
+    /**
+       @param sp: sparse matrix for non zero elements traversal
+     */
     RowWiseSparseIterator(Sp const& sp): sp(sp), outerIdx(0), innerIt(sp, 0)
     {
     }
     RowWiseSparseIterator& operator++()
     {
         ++innerIt;
-        if(!innerIt)
+        if (!innerIt)
         {
-            if(++outerIdx >= sp.outerSize())
+            if (++outerIdx >= sp.outerSize())
             {
-                outerIdx= 0;
+                outerIdx = 0;
             }
             new (&innerIt) typename Sp::InnerIterator(sp, outerIdx);// innerIt= typename Sp::InnerIterator(sp, outerIdx) when Eigen will be fixed
         }
@@ -323,7 +424,7 @@ struct RowWiseSparseIterator : Coords2DIterator
     }
     std::pair<int, int> operator*() const
     {
-//        std::cerr<<"sparse it r="<<innerIt.row()<<" c="<<innerIt.col()<<std::endl;
+        //        std::cerr<<"sparse it r="<<innerIt.row()<<" c="<<innerIt.col()<<std::endl;
         return std::pair<int, int>(innerIt.row(), innerIt.col());
     }
 private:
@@ -335,13 +436,13 @@ private:
 /**
    translate an iterator
  */
-    template<typename C2DIter>
+template<typename C2DIter>
 struct TranslatedIterator : Coords2DIterator
 {
-/**
-   @param C2DIter: translation as a vector of (rows, cols)
-   @param tr: translation as a vector of (rows, cols)
- */
+    /**
+       @param C2DIter: translation as a vector of (rows, cols)
+       @param tr: translation as a vector of (rows, cols)
+     */
     TranslatedIterator(C2DIter const& c2dIter, Coords2D tr): it(c2dIter), tr(tr)
     {
     }
@@ -361,7 +462,7 @@ struct TranslatedIterator : Coords2DIterator
         std::pair<int, int>res(*it);
         res.first += tr.first;
         res.second += tr.second;
-//        std::cerr<<"translated it r="<< res.first<<" c="<<res.second<<std::endl;
+        //        std::cerr<<"translated it r="<< res.first<<" c="<<res.second<<std::endl;
 
         return res;
     }
@@ -375,15 +476,15 @@ private:
  * Could handle wrap around with a length arg (i.e. to recycle values instead of raising
  * "error 15 Submatrix incorrectly defined."
  */
-template<bool AsVector=false> struct Coords : Coords2DIterator
+template<bool AsVector = false> struct Coords : Coords2DIterator
 {
-    Coords(int CONST* coords, int unused=0):coords(coords)
+    Coords(int CONST* coords, int unused = 0): coords(coords)
     {
     }
 
     Coords& operator++()
     {
-        coords+= 2;
+        coords += 2;
         return *this;
     }
 
@@ -396,7 +497,7 @@ template<bool AsVector=false> struct Coords : Coords2DIterator
 
     Coords2D operator*()const
     {
-        return Coords2D(coords[0]-1, coords[1]-1);
+        return Coords2D(coords[0] - 1, coords[1] - 1);
     }
 
 private:
@@ -408,7 +509,7 @@ private:
  */
 template<> struct Coords<true> : Coords2DIterator
 {
-    Coords(int CONST* coords, int rMax):coords(coords), rMax(rMax)
+    Coords(int CONST* coords, int rMax): coords(coords), rMax(rMax)
     {
     }
 
@@ -427,7 +528,7 @@ template<> struct Coords<true> : Coords2DIterator
 
     Coords2D operator*()const
     {
-        return Coords2D((coords[0]-1) % rMax, (coords[0]-1) / rMax);
+        return Coords2D((coords[0] - 1) % rMax, (coords[0] - 1) / rMax);
     }
 
 private:
@@ -457,16 +558,19 @@ struct MatrixIterator : std::iterator<std::forward_iterator_tag, V>
         ++i;
         return tmp;
     }
-    Accessor<S,V> operator*()
+    Accessor<S, V> operator*()
     {
-        return Accessor<S,V>(s, (*i).first, (*i).second);
+        return Accessor<S, V>(s, (*i).first, (*i).second);
     }
 private:
     S& s;
     Iter i;
 };
 template<typename V, typename S, typename Iter>
-MatrixIterator<S,V, Iter> makeMatrixIterator(S& s, Iter i){ return MatrixIterator<S,V,Iter>(s, i);}
+MatrixIterator<S, V, Iter> makeMatrixIterator(S& s, Iter i)
+{
+    return MatrixIterator<S, V, Iter>(s, i);
+}
 
 template<typename S> struct IteratorFromVar;
 
@@ -474,32 +578,33 @@ template<typename S> IteratorFromVar<S> makeIteratorFromVar(S& s);
 
 struct Adjacency
 {
-    Adjacency(double const* x, double const*a): xadj(x), adjncy(a){}
+    Adjacency(double const* x, double const*a): xadj(x), adjncy(a) {}
     double const* xadj;
     double const* adjncy;
 };
 
 template<typename In, typename Sz, typename Out>
-Out mycopy_n(In i, Sz n, Out o){
-    for(; n; --n, ++i, ++o)
+Out mycopy_n(In i, Sz n, Out o)
+{
+    for (; n; --n, ++i, ++o)
     {
-        *o= *i;
+        *o = *i;
     }
     return o;
 }
 
-    template<typename T> std::size_t nonZeros(T CONST& t)
-    {
-        return t.getSize();
-    }
-    template<> std::size_t nonZeros(types::Sparse CONST& sp)
-    {
-        return sp.nonZeros();
-    }
-    template<typename Scalar, int Options, typename Index> std::size_t nonZeros(Eigen::SparseMatrix<Scalar, Options, Index> CONST& sp)
-    {
-        return sp.nonZeros();
-    }
+template<typename T> std::size_t nonZeros(T CONST& t)
+{
+    return t.getSize();
+}
+template<> std::size_t nonZeros(types::Sparse CONST& sp)
+{
+    return sp.nonZeros();
+}
+template<typename Scalar, int Options, typename Index> std::size_t nonZeros(Eigen::SparseMatrix<Scalar, Options, Index> CONST& sp)
+{
+    return sp.nonZeros();
+}
 
 
 /* Default for dense matrix Scilab matrix types
@@ -523,8 +628,9 @@ template<typename S> struct IteratorFromVar { };
 
 template<> struct IteratorFromVar<types::Double> : Coords2DIterator
 {
-    IteratorFromVar(types::Double& d_):d(d_),r(0)
-    { // check dimension ?
+    IteratorFromVar(types::Double& d_): d(d_), r(0)
+    {
+        // check dimension ?
     }
 
     IteratorFromVar& operator++()
@@ -540,7 +646,7 @@ template<> struct IteratorFromVar<types::Double> : Coords2DIterator
     }
     Coords2D operator*()
     {
-        return std::pair<int,int>(static_cast<int>(d.getReal(r,0)-1), d.getReal(r,1)-1);
+        return std::pair<int, int>(static_cast<int>(d.getReal(r, 0) - 1), static_cast<int>(d.getReal(r, 1) - 1));
     }
 private:
     types::Double& d;
@@ -552,7 +658,7 @@ private:
  */
 template<> struct IteratorFromVar<Adjacency> : Coords2DIterator
 {
-    IteratorFromVar(Adjacency& a):xadj(a.xadj), adjncy(a.adjncy),c(1), nb(1)
+    IteratorFromVar(Adjacency& a): xadj(a.xadj), adjncy(a.adjncy), c(1), nb(1)
     {
         update();
     }
@@ -574,12 +680,12 @@ template<> struct IteratorFromVar<Adjacency> : Coords2DIterator
     }
     std::pair<int, int> operator*()
     {
-        return std::pair<int,int>(static_cast<int>(*adjncy)-1, c-1);
+        return std::pair<int, int>(static_cast<int>(*adjncy) - 1, c - 1);
     }
 private:
     void update()
     {
-        for(; xadj[1] <= nb; ++c, ++xadj)
+        for (; xadj[1] <= nb; ++c, ++xadj)
         {
         }
     }
@@ -589,6 +695,9 @@ private:
     std::size_t nb;
 };
 
-template<typename S> IteratorFromVar<S> makeIteratorFromVar(S& s) { return IteratorFromVar<S>(s); }
+template<typename S> IteratorFromVar<S> makeIteratorFromVar(S& s)
+{
+    return IteratorFromVar<S>(s);
+}
 
 #endif
index bae0c35..0b79240 100644 (file)
@@ -74,16 +74,16 @@ struct TYPES_IMPEXP Sparse : GenericType
     void finalize();
 
     /*data management member function defined for compatibility with the Double API*/
-    bool set(int _iRows, int _iCols, double _dblReal);
-    bool set(int _iIndex, double _dblReal)
+    bool set(int _iRows, int _iCols, double _dblReal, bool _bFinalize = true);
+    bool set(int _iIndex, double _dblReal, bool _bFinalize = true)
     {
-        return set(_iIndex % m_iRows, _iIndex / m_iRows, _dblReal);
+        return set(_iIndex % m_iRows, _iIndex / m_iRows, _dblReal, _bFinalize);
     }
 
-    bool set(int _iRows, int _iCols, std::complex<double> v);
-    bool set(int _iIndex, std::complex<double> v)
+    bool set(int _iRows, int _iCols, std::complex<double> v, bool _bFinalize = true);
+    bool set(int _iIndex, std::complex<double> v, bool _bFinalize = true)
     {
-        return set(_iIndex % m_iRows, _iIndex / m_iRows, v);
+        return set(_iIndex % m_iRows, _iIndex / m_iRows, v, _bFinalize);
     }
     /*
       set non zero values to 1.
@@ -92,9 +92,9 @@ struct TYPES_IMPEXP Sparse : GenericType
     /* get real value at coords (r,c)
     **/
     double getReal(int r, int c) const;
-    double getReal(int index) const
+    double getReal(int _iIndex) const
     {
-        return getReal(index);
+        return getReal(_iIndex % m_iRows, _iIndex / m_iRows);
     }
 
     double get(int r, int c) const;
@@ -304,6 +304,7 @@ struct TYPES_IMPEXP Sparse : GenericType
      */
     Sparse* newOnes() const;
 
+    Sparse* newReal() const;
     /** @return the nb of non zero values.
      */
     std::size_t nonZeros() const;
@@ -419,7 +420,7 @@ struct TYPES_IMPEXP Sparse : GenericType
        @param out : ptr used as an output iterator over double values
        @return past-the-end output iterators after ouput is done
      */
-    double* outputRowCol(double* out)const;
+    int* outputRowCol(int* out)const;
 
     /**
        @param dest Double to be filled with values from the current sparse matrix.
@@ -552,7 +553,7 @@ struct TYPES_IMPEXP SparseBool : GenericType
        @return past-the-end output iterator after ouput is done
      */
 
-    double* outputRowCol(double* out)const;
+    int* outputRowCol(int* out)const;
 
     bool operator==(const InternalType& it) CONST;
     bool operator!=(const InternalType& it) CONST;
@@ -577,10 +578,10 @@ struct TYPES_IMPEXP SparseBool : GenericType
         return get(_iIndex % m_iRows, _iIndex / m_iRows);
     }
 
-    bool set(int r, int c, bool b) CONST;
-    bool set(int _iIndex, bool b) CONST
+    bool set(int r, int c, bool b, bool _bFinalize = true) CONST;
+    bool set(int _iIndex, bool b, bool _bFinalize = true) CONST
     {
-        return set(_iIndex % m_iRows, _iIndex / m_iRows, b);
+        return set(_iIndex % m_iRows, _iIndex / m_iRows, b, _bFinalize);
     }
 
     void fill(Bool& dest, int r = 0, int c = 0) CONST;
index e44e82d..fe936b8 100644 (file)
@@ -144,7 +144,7 @@ template<typename T> std::wstring toString(T const& m, int precision)
 
     for (size_t j = 0 ; j < m.rows() ; j++)
     {
-        iRow = j;
+        iRow = (int)j;
         for (size_t i = 0 ; i < m.nonZeros() ; i++)
         {
             if (pInner[i] == j)
@@ -154,7 +154,7 @@ template<typename T> std::wstring toString(T const& m, int precision)
                 {
                     if (pOuter[k] > i)
                     {
-                        iCol = k;
+                        iCol = (int)k;
                         break;
                     }
                 }
@@ -226,7 +226,7 @@ void doAppend(Eigen::SparseMatrix<Scalar1> CONST& src, int r, int c, Eigen::Spar
     typedef Eigen::SparseMatrix<Scalar2> dest_t;
     for (std::size_t k = 0; k != src.outerSize(); ++k)
     {
-        for (srcIt_t it(src, k); it; ++it)
+        for (srcIt_t it(src, (int)k); it; ++it)
         {
             dest.insert( it.row() + r, it.col() + c) =  it.value();
         }
@@ -371,13 +371,13 @@ void Sparse::create(int rows, int cols, Double CONST& src, DestIter o, std::size
     {
         matrixReal = 0;
         matrixCplx =  new CplxSparse_t( rows, cols);
-        matrixCplx->reserve(n);
+        matrixCplx->reserve((int)n);
         mycopy_n(makeMatrixIterator<std::complex<double> >(src, RowWiseFullIterator(src.getRows(), src.getCols())), n, makeMatrixIterator<std::complex<double> >(*matrixCplx, o));
     }
     else
     {
         matrixReal = new RealSparse_t(rows, cols);
-        matrixReal->reserve(n);
+        matrixReal->reserve((int)n);
         matrixCplx =  0;
         mycopy_n(makeMatrixIterator<double >(src,  RowWiseFullIterator(src.getRows(), src.getCols())), n
                  , makeMatrixIterator<double>(*matrixReal, o));
@@ -400,7 +400,7 @@ void Sparse::fill(Double& dest, int r, int c) CONST
     }
 }
 
-bool Sparse::set(int _iRows, int _iCols, std::complex<double> v)
+bool Sparse::set(int _iRows, int _iCols, std::complex<double> v, bool _bFinalize)
 {
     if (_iRows >= getRows() || _iCols >= getCols())
     {
@@ -409,34 +409,21 @@ bool Sparse::set(int _iRows, int _iCols, std::complex<double> v)
 
     if (matrixReal)
     {
-        double val = matrixReal->coeff(_iRows, _iCols);
-        if (val == 0)
-        {
-            matrixReal->insert(_iRows, _iCols) = v.real();
-        }
-        else
-        {
-            matrixReal->coeffRef(_iRows, _iCols) = v.real();
-        }
+        matrixReal->coeffRef(_iRows, _iCols) = v.real();
     }
     else
     {
-        std::complex<double> val = matrixCplx->coeff(_iRows, _iCols);
-        if (val == std::complex<double>(0, 0))
-        {
-            matrixCplx->insert(_iRows, _iCols) = v;
-        }
-        else
-        {
-            matrixCplx->coeffRef(_iRows, _iCols) = v;
-        }
+        matrixCplx->coeffRef(_iRows, _iCols) = v;
     }
 
-    finalize();
+    if (_bFinalize)
+    {
+        finalize();
+    }
     return true;
 }
 
-bool Sparse::set(int _iRows, int _iCols, double _dblReal)
+bool Sparse::set(int _iRows, int _iCols, double _dblReal, bool _bFinalize)
 {
     if (_iRows >= getRows() || _iCols >= getCols())
     {
@@ -445,30 +432,18 @@ bool Sparse::set(int _iRows, int _iCols, double _dblReal)
 
     if (matrixReal)
     {
-        double val = matrixReal->coeff(_iRows, _iCols);
-        if (val == 0)
-        {
-            matrixReal->insert(_iRows, _iCols) = _dblReal;
-        }
-        else
-        {
-            matrixReal->coeffRef(_iRows, _iCols) = _dblReal;
-        }
+        matrixReal->coeffRef(_iRows, _iCols) = _dblReal;
     }
     else
     {
-        std::complex<double> val = matrixCplx->coeff(_iRows, _iCols);
-        if (val == std::complex<double>(0, 0))
-        {
-            matrixCplx->insert(_iRows, _iCols) = std::complex<double>(_dblReal, 0);
-        }
-        else
-        {
-            matrixCplx->coeffRef(_iRows, _iCols) = std::complex<double>(_dblReal, 0);
-        }
+        matrixCplx->coeffRef(_iRows, _iCols) = std::complex<double>(_dblReal, 0);
     }
 
-    finalize();
+
+    if (_bFinalize)
+    {
+        finalize();
+    }
     return true;
 }
 
@@ -588,58 +563,79 @@ bool Sparse::resize(int _iNewRows, int _iNewCols)
     {
         if (matrixReal)
         {
-            RealSparse_t *newReal = new RealSparse_t(_iNewRows, _iNewCols);
-
             //item count
             size_t iNonZeros = nonZeros();
+            RealSparse_t *newReal = new RealSparse_t(_iNewRows, _iNewCols);
+            newReal->reserve((int)iNonZeros);
+
 
             //coords
-            double* pRows = new double[iNonZeros * 2];
+            int* pRows = new int[iNonZeros * 2];
             outputRowCol(pRows);
-            double* pCols = pRows + iNonZeros;
+            int* pCols = pRows + iNonZeros;
 
             //values
             double* pNonZeroR = new double[iNonZeros];
             double* pNonZeroI = new double[iNonZeros];
             outputValues(pNonZeroR, pNonZeroI);
 
+            typedef Eigen::Triplet<double> triplet;
+            std::vector<triplet> tripletList;
+
             for (size_t i = 0 ; i < iNonZeros ; i++)
             {
-                newReal->insert((int)pRows[i] - 1, (int)pCols[i] - 1) = pNonZeroR[i];
+                tripletList.push_back(triplet((int)pRows[i] - 1, (int)pCols[i] - 1, pNonZeroR[i]));
             }
 
+            newReal->setFromTriplets(tripletList.begin(), tripletList.end());
+
             delete matrixReal;
             matrixReal = newReal;
+            delete[] pRows;
+            delete[] pNonZeroR;
+            delete[] pNonZeroI;
         }
         else
         {
-            CplxSparse_t *newCplx = new CplxSparse_t(_iNewRows, _iNewCols);
-
             //item count
             size_t iNonZeros = nonZeros();
+            CplxSparse_t *newCplx = new CplxSparse_t(_iNewRows, _iNewCols);
+            newCplx->reserve((int)iNonZeros);
 
             //coords
-            double* pRows = new double[iNonZeros * 2];
+            int* pRows = new int[iNonZeros * 2];
             outputRowCol(pRows);
-            double* pCols = pRows + iNonZeros;
+            int* pCols = pRows + iNonZeros;
 
             //values
             double* pNonZeroR = new double[iNonZeros];
             double* pNonZeroI = new double[iNonZeros];
             outputValues(pNonZeroR, pNonZeroI);
 
+            typedef Eigen::Triplet<std::complex<double> > triplet;
+            std::vector<triplet> tripletList;
+
             for (size_t i = 0 ; i < iNonZeros ; i++)
             {
-                newCplx->insert((int)pRows[i] - 1, (int)pCols[i] - 1) = std::complex<double>(pNonZeroR[i], pNonZeroI[i]);
+                tripletList.push_back(triplet((int)pRows[i] - 1, (int)pCols[i] - 1, std::complex<double>(pNonZeroR[i], pNonZeroI[i])));
             }
 
+            newCplx->setFromTriplets(tripletList.begin(), tripletList.end());
+
+
             delete matrixCplx;
             matrixCplx = newCplx;
+            delete[] pRows;
+            delete[] pNonZeroR;
+            delete[] pNonZeroI;
         }
 
         m_iRows = _iNewRows;
         m_iCols = _iNewCols;
         m_iSize = _iNewRows * _iNewCols;
+        m_piDims[0] = m_iRows;
+        m_piDims[1] = m_iCols;
+
         res = true;
     }
     catch (...)
@@ -926,22 +922,22 @@ Sparse* Sparse::insert(typed_list* _pArgs, InternalType* _pSource)
             {
                 if (pSource->isComplex())
                 {
-                    set(iRow, iCol, std::complex<double>(pSource->get(0), pSource->getImg(0)));
+                    set(iRow, iCol, std::complex<double>(pSource->get(0), pSource->getImg(0)), false);
                 }
                 else
                 {
-                    set(iRow, iCol, pSource->get(0));
+                    set(iRow, iCol, pSource->get(0), false);
                 }
             }
             else
             {
                 if (pSource->isComplex())
                 {
-                    set(iRow, iCol, std::complex<double>(pSource->get(i), pSource->getImg(i)));
+                    set(iRow, iCol, std::complex<double>(pSource->get(i), pSource->getImg(i)), false);
                 }
                 else
                 {
-                    set(iRow, iCol, pSource->get(i));
+                    set(iRow, iCol, pSource->get(i), false);
                 }
             }
         }
@@ -959,11 +955,11 @@ Sparse* Sparse::insert(typed_list* _pArgs, InternalType* _pSource)
             {
                 if (pSource->isComplex())
                 {
-                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, std::complex<double>(pSource->get(0), pSource->getImg(0)));
+                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, std::complex<double>(pSource->get(0), pSource->getImg(0)), false);
                 }
                 else
                 {
-                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, pSource->get(0));
+                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, pSource->get(0), false);
                 }
             }
             else
@@ -973,16 +969,17 @@ Sparse* Sparse::insert(typed_list* _pArgs, InternalType* _pSource)
 
                 if (pSource->isComplex())
                 {
-                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, std::complex<double>(pSource->get(iRowOrig, iColOrig), pSource->getImg(iRowOrig, iColOrig)));
+                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, std::complex<double>(pSource->get(iRowOrig, iColOrig), pSource->getImg(iRowOrig, iColOrig)), false);
                 }
                 else
                 {
-                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, pSource->get(iRowOrig, iColOrig));
+                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, pSource->get(iRowOrig, iColOrig), false);
                 }
             }
         }
     }
 
+    finalize();
     return this;
 }
 
@@ -1085,11 +1082,11 @@ Sparse* Sparse::insert(typed_list* _pArgs, Sparse* _pSource)
             {
                 if (_pSource->isComplex())
                 {
-                    set(iRow, iCol, _pSource->getImg(0, 0));
+                    set(iRow, iCol, _pSource->getImg(0, 0), false);
                 }
                 else
                 {
-                    set(iRow, iCol, _pSource->get(0, 0));
+                    set(iRow, iCol, _pSource->get(0, 0), false);
                 }
             }
             else
@@ -1098,11 +1095,11 @@ Sparse* Sparse::insert(typed_list* _pArgs, Sparse* _pSource)
                 int iColOrig = i / _pSource->getRows();
                 if (_pSource->isComplex())
                 {
-                    set(iRow, iCol, _pSource->getImg(iRowOrig, iColOrig));
+                    set(iRow, iCol, _pSource->getImg(iRowOrig, iColOrig), false);
                 }
                 else
                 {
-                    set(iRow, iCol, _pSource->get(iRowOrig, iColOrig));
+                    set(iRow, iCol, _pSource->get(iRowOrig, iColOrig), false);
                 }
             }
         }
@@ -1120,11 +1117,11 @@ Sparse* Sparse::insert(typed_list* _pArgs, Sparse* _pSource)
             {
                 if (_pSource->isComplex())
                 {
-                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->getImg(0, 0));
+                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->getImg(0, 0), false);
                 }
                 else
                 {
-                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->get(0, 0));
+                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->get(0, 0), false);
                 }
             }
             else
@@ -1133,16 +1130,17 @@ Sparse* Sparse::insert(typed_list* _pArgs, Sparse* _pSource)
                 int iColOrig = i / _pSource->getRows();
                 if (_pSource->isComplex())
                 {
-                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->getImg(iRowOrig, iColOrig));
+                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->getImg(iRowOrig, iColOrig), false);
                 }
                 else
                 {
-                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->get(iRowOrig, iColOrig));
+                    set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->get(iRowOrig, iColOrig), false);
                 }
             }
         }
     }
 
+    finalize();
     return this;
 }
 
@@ -1461,7 +1459,7 @@ InternalType* Sparse::extract(typed_list* _pArgs)
                     if (dbl.real() != 0 || dbl.imag() != 0)
                     {
                         //only non zero values
-                        pOut->set(iRowWrite, iColWrite, dbl);
+                        pOut->set(iRowWrite, iColWrite, dbl, false);
                     }
                 }
                 else
@@ -1470,7 +1468,7 @@ InternalType* Sparse::extract(typed_list* _pArgs)
                     if (dbl != 0)
                     {
                         //only non zero values
-                        pOut->set(iRowWrite, iColWrite, dbl);
+                        pOut->set(iRowWrite, iColWrite, dbl, false);
                     }
                 }
             }
@@ -1503,7 +1501,7 @@ InternalType* Sparse::extract(typed_list* _pArgs)
                         if (dbl.real() != 0 || dbl.imag() != 0)
                         {
                             //only non zero values
-                            pOut->set(iRow, iCol, dbl);
+                            pOut->set(iRow, iCol, dbl, false);
                         }
                     }
                     else
@@ -1512,7 +1510,7 @@ InternalType* Sparse::extract(typed_list* _pArgs)
                         if (dbl != 0)
                         {
                             //only non zero values
-                            pOut->set(iRow, iCol, dbl);
+                            pOut->set(iRow, iCol, dbl, false);
                         }
                     }
                     iPos++;
@@ -1525,6 +1523,7 @@ InternalType* Sparse::extract(typed_list* _pArgs)
         }
     }
 
+    finalize();
     return pOut;
 }
 
@@ -1725,6 +1724,28 @@ Sparse* Sparse::newOnes() const
                        : new RealSparse_t(matrixCplx->cast<BoolCast>().cast<double>())
                        , 0);
 }
+
+struct RealCast
+{
+    RealCast(std::complex<double> const& c): b(c.real()) {}
+    operator bool () const
+    {
+        return b != 0;
+    }
+    operator double() const
+    {
+        return b;
+    }
+    double b;
+};
+Sparse* Sparse::newReal() const
+{
+    return new Sparse( matrixReal
+                       ? matrixReal
+                       : new RealSparse_t(matrixCplx->cast<RealCast>())
+                       , 0);
+}
+
 std::size_t Sparse::nonZeros() const
 {
     if (isComplex())
@@ -1814,16 +1835,16 @@ template<typename S> struct GetImag: std::unary_function<typename S::InnerIterat
         return it.value().imag();
     }
 };
-template<typename S> struct GetRow: std::unary_function<typename S::InnerIterator, double>
+template<typename S> struct GetRow: std::unary_function<typename S::InnerIterator, int>
 {
-    double operator()(typename S::InnerIterator it) const
+    int operator()(typename S::InnerIterator it) const
     {
         return it.row() + 1;
     }
 };
-template<typename S> struct GetCol: std::unary_function<typename S::InnerIterator, double>
+template<typename S> struct GetCol: std::unary_function<typename S::InnerIterator, int>
 {
-    double operator()(typename S::InnerIterator it) const
+    int operator()(typename S::InnerIterator it) const
     {
         return it.col() + 1;
     }
@@ -1833,7 +1854,7 @@ template<typename S, typename Out, typename F> Out sparseTransform(S& s, Out o,
 {
     for (std::size_t k(0); k < s.outerSize(); ++k)
     {
-        for (typename S::InnerIterator it(s, k); it; ++it, ++o)
+        for (typename S::InnerIterator it(s, (int)k); it; ++it, ++o)
         {
             *o = f(it);
         }
@@ -1850,7 +1871,7 @@ std::pair<double*, double*> Sparse::outputValues(double* outReal, double* outIma
                             , sparseTransform(*matrixCplx, outImag, GetImag<CplxSparse_t>()));
 }
 
-double* Sparse::outputRowCol(double* out)const
+int* Sparse::outputRowCol(int* out)const
 {
     return matrixReal
            ? sparseTransform(*matrixReal, sparseTransform(*matrixReal, out, GetRow<RealSparse_t>()), GetCol<RealSparse_t>())
@@ -1945,57 +1966,71 @@ bool Sparse::reshape(int _iNewRows, int _iNewCols)
     {
         if (matrixReal)
         {
-            RealSparse_t *newReal = new RealSparse_t(_iNewRows, _iNewCols);
-
             //item count
             size_t iNonZeros = nonZeros();
+            RealSparse_t *newReal = new RealSparse_t(_iNewRows, _iNewCols);
+            newReal->reserve((int)iNonZeros);
 
             //coords
-            double* pRows = new double[iNonZeros * 2];
+            int* pRows = new int[iNonZeros * 2];
             outputRowCol(pRows);
-            double* pCols = pRows + iNonZeros;
+            int* pCols = pRows + iNonZeros;
 
             //values
             double* pNonZeroR = new double[iNonZeros];
             double* pNonZeroI = new double[iNonZeros];
             outputValues(pNonZeroR, pNonZeroI);
 
-            //compute new positions
+            typedef Eigen::Triplet<double> triplet;
+            std::vector<triplet> tripletList;
+
             for (size_t i = 0 ; i < iNonZeros ; i++)
             {
                 int iCurrentPos = ((int)pCols[i] - 1) * getRows() + ((int)pRows[i] - 1);
-                newReal->insert((int)(iCurrentPos % _iNewRows), (int)(iCurrentPos / _iNewRows)) = pNonZeroR[i];
+                tripletList.push_back(triplet((int)(iCurrentPos % _iNewRows), (int)(iCurrentPos / _iNewRows), pNonZeroR[i]));
             }
 
+            newReal->setFromTriplets(tripletList.begin(), tripletList.end());
+
             delete matrixReal;
             matrixReal = newReal;
+            delete[] pRows;
+            delete[] pNonZeroR;
+            delete[] pNonZeroI;
         }
         else
         {
-            CplxSparse_t *newCplx = new CplxSparse_t(_iNewRows, _iNewCols);
-
             //item count
             size_t iNonZeros = nonZeros();
+            CplxSparse_t *newCplx = new CplxSparse_t(_iNewRows, _iNewCols);
+            newCplx->reserve((int)iNonZeros);
 
             //coords
-            double* pRows = new double[iNonZeros * 2];
+            int* pRows = new int[iNonZeros * 2];
             outputRowCol(pRows);
-            double* pCols = pRows + iNonZeros;
+            int* pCols = pRows + iNonZeros;
 
             //values
             double* pNonZeroR = new double[iNonZeros];
             double* pNonZeroI = new double[iNonZeros];
             outputValues(pNonZeroR, pNonZeroI);
 
-            //compute new positions
+            typedef Eigen::Triplet<std::complex<double> > triplet;
+            std::vector<triplet> tripletList;
+
             for (size_t i = 0 ; i < iNonZeros ; i++)
             {
                 int iCurrentPos = ((int)pCols[i] - 1) * getRows() + ((int)pRows[i] - 1);
-                newCplx->insert((int)(iCurrentPos % _iNewRows), (int)(iCurrentPos / _iNewRows)) = std::complex<double>(pNonZeroR[i], pNonZeroI[i]);
+                tripletList.push_back(triplet((int)(iCurrentPos % _iNewRows), (int)(iCurrentPos / _iNewRows), std::complex<double>(pNonZeroR[i], pNonZeroI[i])));
             }
 
+            newCplx->setFromTriplets(tripletList.begin(), tripletList.end());
+
             delete matrixCplx;
             matrixCplx = newCplx;
+            delete[] pRows;
+            delete[] pNonZeroR;
+            delete[] pNonZeroI;
         }
 
         m_iRows = _iNewRows;
@@ -2085,7 +2120,7 @@ void SparseBool::create(int rows, int cols, Bool CONST& src, DestIter o, std::si
 
     matrixBool = new BoolSparse_t(rows, cols);
 
-    matrixBool->reserve(n);
+    matrixBool->reserve((int)n);
     mycopy_n(makeMatrixIterator<int>(src,  RowWiseFullIterator(src.getRows(), src.getCols())), n
              , makeMatrixIterator<bool>(*matrixBool, o));
     finalize();
@@ -2119,28 +2154,39 @@ bool SparseBool::resize(int _iNewRows, int _iNewCols)
     bool res = false;
     try
     {
-        BoolSparse_t *newBool = new BoolSparse_t(_iNewRows, _iNewCols);
-
         //item count
         size_t iNonZeros = nbTrue();
 
+        BoolSparse_t *newBool = new BoolSparse_t(_iNewRows, _iNewCols);
+        newBool->reserve((int)iNonZeros);
+
         //coords
-        double* pRows = new double[iNonZeros * 2];
+        int* pRows = new int[iNonZeros * 2];
         outputRowCol(pRows);
-        double* pCols = pRows + iNonZeros;
+        int* pCols = pRows + iNonZeros;
+
+        typedef Eigen::Triplet<bool> triplet;
+        std::vector<triplet> tripletList;
 
         for (size_t i = 0 ; i < iNonZeros ; i++)
         {
-            newBool->insert((int)pRows[i] - 1, (int)pCols[i] - 1) = true;
+            tripletList.push_back(triplet((int)pRows[i] - 1, (int)pCols[i] - 1, true));
         }
 
+        newBool->setFromTriplets(tripletList.begin(), tripletList.end());
+
         delete matrixBool;
         matrixBool = newBool;
+        delete[] pRows;
 
         m_iRows = _iNewRows;
         m_iCols = _iNewCols;
         m_iSize = _iNewRows * _iNewCols;
+        m_piDims[0] = m_iRows;
+        m_piDims[1] = m_iCols;
+
         res = true;
+
     }
     catch (...)
     {
@@ -2241,13 +2287,13 @@ SparseBool* SparseBool::insert(typed_list* _pArgs, SparseBool* _pSource)
 
             if (_pSource->isScalar())
             {
-                set(iRow, iCol, _pSource->get(0, 0));
+                set(iRow, iCol, _pSource->get(0, 0), false);
             }
             else
             {
                 int iRowOrig = i % _pSource->getRows();
                 int iColOrig = i / _pSource->getRows();
-                set(iRow, iCol, _pSource->get(iRowOrig, iColOrig));
+                set(iRow, iCol, _pSource->get(iRowOrig, iColOrig), false);
             }
         }
     }
@@ -2262,17 +2308,18 @@ SparseBool* SparseBool::insert(typed_list* _pArgs, SparseBool* _pSource)
         {
             if (_pSource->isScalar())
             {
-                set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->get(0, 0));
+                set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->get(0, 0), false);
             }
             else
             {
                 int iRowOrig = i % _pSource->getRows();
                 int iColOrig = i / _pSource->getRows();
-                set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->get(iRowOrig, iColOrig));
+                set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, _pSource->get(iRowOrig, iColOrig), false);
             }
         }
     }
 
+    finalize();
     return this;
 }
 
@@ -2367,11 +2414,11 @@ SparseBool* SparseBool::insert(typed_list* _pArgs, InternalType* _pSource)
             int iCol = static_cast<int>(pIdx[i] - 1) / getRows();
             if (pSource->isScalar())
             {
-                set(iRow, iCol, pSource->get(0));
+                set(iRow, iCol, pSource->get(0) != 0, false);
             }
             else
             {
-                set(iRow, iCol, pSource->get(i));
+                set(iRow, iCol, pSource->get(i) != 0, false);
             }
         }
     }
@@ -2386,18 +2433,19 @@ SparseBool* SparseBool::insert(typed_list* _pArgs, InternalType* _pSource)
         {
             if (pSource->isScalar())
             {
-                set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, pSource->get(0));
+                set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, pSource->get(0) != 0, false);
             }
             else
             {
                 int iRowOrig = i % pSource->getRows();
                 int iColOrig = i / pSource->getRows();
 
-                set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, pSource->get(iRowOrig, iColOrig));
+                set((int)pIdxRow[i % iRowSize] - 1, (int)pIdxCol[i / iRowSize] - 1, pSource->get(iRowOrig, iColOrig) != 0, false);
             }
         }
     }
 
+    finalize();
     return this;
 }
 
@@ -2822,7 +2870,7 @@ InternalType* SparseBool::extract(typed_list* _pArgs)
                 if (bValue)
                 {
                     //only non zero values
-                    pOut->set(iRowWrite, iColWrite, true);
+                    pOut->set(iRowWrite, iColWrite, true, false);
                 }
             }
         }
@@ -2854,7 +2902,7 @@ InternalType* SparseBool::extract(typed_list* _pArgs)
                     if (bValue)
                     {
                         //only non zero values
-                        pOut->set(iRow, iCol, true);
+                        pOut->set(iRow, iCol, true, false);
                     }
                     iPos++;
                 }
@@ -2866,6 +2914,7 @@ InternalType* SparseBool::extract(typed_list* _pArgs)
         }
     }
 
+    finalize();
     return pOut;
 }
 
@@ -2904,7 +2953,7 @@ int* SparseBool::getColPos(int* _piColPos)
     return _piColPos;
 }
 
-double* SparseBool::outputRowCol(double* out)const
+int* SparseBool::outputRowCol(int* out)const
 {
     return sparseTransform(*matrixBool, sparseTransform(*matrixBool, out, GetRow<BoolSparse_t>()), GetCol<BoolSparse_t>());
 }
@@ -2939,19 +2988,14 @@ bool SparseBool::get(int r, int c) CONST
     return matrixBool->coeff(r, c);
 }
 
-bool SparseBool::set(int _iRows, int _iCols, bool _bVal) CONST
+bool SparseBool::set(int _iRows, int _iCols, bool _bVal, bool _bFinalize) CONST
 {
-    bool val = matrixBool->coeff(_iRows, _iCols);
-    if (val)
-    {
-        matrixBool->coeffRef(_iRows, _iCols) = _bVal;
-    }
-    else
+    matrixBool->coeffRef(_iRows, _iCols) = _bVal;
+
+    if (_bFinalize)
     {
-        matrixBool->insert(_iRows, _iCols) = _bVal;
+        finalize();
     }
-
-    finalize();
     return true;
 }
 
@@ -3014,25 +3058,30 @@ bool SparseBool::reshape(int _iNewRows, int _iNewCols)
     bool res = false;
     try
     {
-        BoolSparse_t *newBool = new BoolSparse_t(_iNewRows, _iNewCols);
-
         //item count
         size_t iNonZeros = matrixBool->nonZeros();
+        BoolSparse_t *newBool = new BoolSparse_t(_iNewRows, _iNewCols);
+        newBool->reserve((int)iNonZeros);
 
         //coords
-        double* pRows = new double[iNonZeros * 2];
+        int* pRows = new int[iNonZeros * 2];
         outputRowCol(pRows);
-        double* pCols = pRows + iNonZeros;
+        int* pCols = pRows + iNonZeros;
+
+        typedef Eigen::Triplet<bool> triplet;
+        std::vector<triplet> tripletList;
 
-        //compute new positions
         for (size_t i = 0 ; i < iNonZeros ; i++)
         {
             int iCurrentPos = ((int)pCols[i] - 1) * getRows() + ((int)pRows[i] - 1);
-            newBool->insert((int)(iCurrentPos % _iNewRows), (int)(iCurrentPos / _iNewRows)) = true;
+            tripletList.push_back(triplet((int)(iCurrentPos % _iNewRows), (int)(iCurrentPos / _iNewRows), true));
         }
 
+        newBool->setFromTriplets(tripletList.begin(), tripletList.end());
+
         delete matrixBool;
         matrixBool = newBool;
+        delete[] pRows;
 
         m_iRows = _iNewRows;
         m_iCols = _iNewCols;