From: andy a. <aa...@us...> - 2004-08-03 14:45:41
|
Update of /cvsroot/octave/octave-forge/main/sparse In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv532/main/sparse Modified Files: complex_sparse_ops.cc sparse_ops.cc sparse_ops.h Log Message: clean up ASSEMBLE_SPARSE macro Index: complex_sparse_ops.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/main/sparse/complex_sparse_ops.cc,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- complex_sparse_ops.cc 2 Aug 2004 16:35:40 -0000 1.29 +++ complex_sparse_ops.cc 3 Aug 2004 14:45:30 -0000 1.30 @@ -1460,7 +1460,7 @@ int assemble_do_sum) { DEBUGMSG("complex_sparse - assemble_sparse"); - ASSEMBLE_SPARSE( Complex ) + ASSEMBLE_SPARSE( Complex, true ) // oct_sparse_verify_supermatrix( X ); return X; } @@ -1734,6 +1734,9 @@ /* * $Log$ + * Revision 1.30 2004/08/03 14:45:30 aadler + * clean up ASSEMBLE_SPARSE macro + * * Revision 1.29 2004/08/02 16:35:40 aadler * saving to the octave -binary format * Index: sparse_ops.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/main/sparse/sparse_ops.cc,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- sparse_ops.cc 2 Aug 2004 18:46:57 -0000 1.23 +++ sparse_ops.cc 3 Aug 2004 14:45:31 -0000 1.24 @@ -57,7 +57,7 @@ int assemble_do_sum) { DEBUGMSG("sparse - assemble_sparse"); - ASSEMBLE_SPARSE( double ) + ASSEMBLE_SPARSE( double, true ) // oct_sparse_verify_supermatrix( X ); return X; } @@ -1510,6 +1510,9 @@ /* * $Log$ + * Revision 1.24 2004/08/03 14:45:31 aadler + * clean up ASSEMBLE_SPARSE macro + * * Revision 1.23 2004/08/02 18:46:57 aadler * some code for concat operators * Index: sparse_ops.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/sparse/sparse_ops.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- sparse_ops.h 22 Dec 2003 15:13:23 -0000 1.11 +++ sparse_ops.h 3 Aug 2004 14:45:31 -0000 1.12 @@ -19,6 +19,9 @@ $Id$ $Log$ +Revision 1.12 2004/08/03 14:45:31 aadler +clean up ASSEMBLE_SPARSE macro + Revision 1.11 2003/12/22 15:13:23 pkienzle Use error/return rather than SP_FATAL_ERROR where possible. @@ -271,7 +274,7 @@ // The OCTAVE_LOCAL_BUFFER can't be used for the sort index // when the requested size is too big. we need to put it on the // heap. -#define ASSEMBLE_SPARSE( TYPX ) \ +#define ASSEMBLE_SPARSE( TYPX , REJECT_OUT_OF_RANGE ) \ int nnz= MAX( ridxA.length(), cidxA.length() ); \ TYPX* coefX= (TYPX*)oct_sparse_malloc( nnz * sizeof(TYPX)); \ int * ridxX= (int *)oct_sparse_malloc( nnz * sizeof(int) ); \ @@ -287,15 +290,19 @@ for (int i=0; i<nnz; i++) { \ double rowidx= ( ri_scalar ? ridxA(0) : ridxA(i) ) - 1; \ double colidx= ( ci_scalar ? cidxA(0) : cidxA(i) ) - 1; \ - if (rowidx >= m || rowidx < 0) \ - error("sparse row index out of range"); \ - else if (colidx >= n || colidx < 0) \ - error("sparse column index out of range"); \ - if (error_state) { actual_nnz=0; break; } \ - if ( coefA(cf_scalar?0:i) != 0. ) { \ - sidx[actual_nnz].val = (long) ( rowidx + m*colidx ); \ - sidx[actual_nnz].idx = i; \ - actual_nnz++; \ + if (rowidx < m && rowidx >= 0 && \ + colidx < n && colidx >= 0 ) { \ + if ( coefA( cf_scalar ? 0 : i ) != 0. ) { \ + sidx[actual_nnz].val = (long) ( rowidx + m * colidx ); \ + sidx[actual_nnz].idx = i; \ + actual_nnz++; \ + } \ + } \ + else { \ + if( REJECT_OUT_OF_RANGE ) \ + error("sparse (row,col) index (%d,%d) out of range", rowidx,colidx); \ + actual_nnz=0; \ + break; \ } \ } \ \ @@ -312,16 +319,16 @@ long val= (long) sidx[i].val; \ if (prev_val < val) { \ ii++; \ - coefX[ii]= ( cf_scalar ? coefA(0) : coefA(idx) ); \ - double ri = ( ri_scalar ? ridxA(0) : ridxA(idx) ) - 1 ; \ + coefX[ii]= coefA( cf_scalar ? 0 : idx ); \ + double ri = ridxA( ri_scalar ? 0 : idx ) - 1 ; \ ridxX[ii]= (long) (ri - ((long) (ri/m))*m ) ; \ - long ci = (long)( ci_scalar ? cidxA(0) : cidxA(idx) ) - 1 ; \ + long ci = (long) cidxA( ci_scalar ? 0 : idx ) - 1 ; \ while( cx < ci ) cidxX[++cx]= ii; \ } else { \ if (assemble_do_sum) \ - coefX[ii]+= ( cf_scalar ? coefA(0) : coefA(idx) ); \ + coefX[ii]+= coefA( cf_scalar ? 0 : idx ); \ else \ - coefX[ii] = ( cf_scalar ? coefA(0) : coefA(idx) ); \ + coefX[ii] = coefA( cf_scalar ? 0 : idx ); \ } \ prev_val= val;\ } \ |