subtraction between two sparses fixed 43/15443/3
Cedric Delamarre [Thu, 30 Oct 2014 10:58:38 +0000 (11:58 +0100)]
a=rand(5,2)*rand(2,5);A=sparse(a);
[hand,rk]=lufact(A);[P,L,U,Q]=luget(hand);
full(L), P*L*U*Q-A

sparse([1 2 3]) - sparse([1 2 1])

Change-Id: I9d9fe831bfcddd7cc05bbdf8e7f87bb80d6c5904

scilab/modules/ast/includes/types/sparse.hxx
scilab/modules/ast/src/cpp/operations/types_subtraction.cpp
scilab/modules/ast/src/cpp/types/sparse.cpp

index 02181d8..0b66c56 100644 (file)
@@ -287,7 +287,7 @@ struct EXTERN_AST Sparse : GenericType
        @param o other matrix to substract
        @return ptr to the new matrix, 0 in case of failure
      */
-    GenericType* substract(Sparse const& o) const;
+    Sparse* substract(Sparse const& o) const;
 
     /* create a new sparse matrix containing the result of an subtraction
        @param d scalar to subtract
index 186db76..a7dcd2d 100644 (file)
@@ -2308,7 +2308,9 @@ template<> InternalType* sub_M_M<Sparse, Sparse, Sparse>(Sparse* _pL, Sparse* _p
         throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
     }
 
-    return _pL->substract(*_pR);
+    types::Sparse* pSPOut = _pL->substract(*_pR);
+    pSPOut->finalize();
+    return pSPOut;
 }
 
 //d - sp
index 8a6e838..f8d3c16 100644 (file)
@@ -1640,8 +1640,7 @@ Sparse* Sparse::add(Sparse const& o) const
     return new Sparse(realSp, cplxSp);
 }
 
-// GenericType because we might return a Double* for scalar operand
-GenericType* Sparse::substract(Sparse const& o) const
+Sparse* Sparse::substract(Sparse const& o) const
 {
     RealSparse_t* realSp(0);
     CplxSparse_t* cplxSp(0);