changeset 11322:208a1a9bd97f octave-forge

discontinued use of rsb_assign rsb_transpose rsb_htranspose in favour of rsb_clone_transformed.
author michelemartone
date Tue, 25 Dec 2012 14:17:04 +0000
parents 11f71a43d311
children 852bd046f230
files main/sparsersb/src/sparsersb.cc
diffstat 1 files changed, 31 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/main/sparsersb/src/sparsersb.cc	Mon Dec 24 12:04:05 2012 +0000
+++ b/main/sparsersb/src/sparsersb.cc	Tue Dec 25 14:17:04 2012 +0000
@@ -46,6 +46,7 @@
  * elemental division support for complex matrices is incomplete
  * shall update to symmetric be forbidden or rather trigger a conversion ?
  * after file read, shall return various structural info
+ * norm computation
  *
  * Developer notes:
  /usr/share/doc/octave3.2-htmldoc//interpreter/Getting-Started-with-Oct_002dFiles.html#Getting-Started-with-Oct_002dFiles
@@ -102,7 +103,8 @@
 #define RSBOI_RF RSB_FLAG_DEFAULT_RSB_MATRIX_FLAGS 
 #define RSBOI_DCF RSB_FLAG_DUPLICATES_SUM
 #define RSBOI_NF RSB_FLAG_NOFLAGS
-#define RSBOI_EXPF RSB_FLAG_NOFLAGS
+//#define RSBOI_EXPF RSB_FLAG_NOFLAGS
+#define RSBOI_EXPF RSB_FLAG_IDENTICAL_FLAGS
 #define RSBOI_T double
 #define RSBOI_MP(M) RSBOI_DUMP(RSB_PRINTF_MATRIX_SUMMARY_ARGS(M))
 #undef RSB_FULLY_IMPLEMENTED
@@ -367,7 +369,14 @@
 		}
 
 		octave_sparse_rsb_matrix (const octave_sparse_rsb_matrix& T) :
-		octave_sparse_matrix (T)  { RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); this->A=rsb_clone(T.A); };
+		octave_sparse_matrix (T)  {
+			rsb_err_t errval=RSB_ERR_NO_ERROR;
+			struct rsb_matrix_t*matrixp=NULL;
+		       	RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);
+			//this->A=rsb_clone(T.A);
+			errval = rsb_clone_transformed(&matrixp,RSB_NUMERICAL_TYPE_SAME_TYPE,RSB_TRANSPOSITION_N,NULL,T.A,RSBOI_EXPF);
+			this->A=matrixp;
+		};
 		octave_idx_type length (void) const { return this->nnz(); }
 		octave_idx_type nelem (void) const { return this->nnz(); }
 		octave_idx_type numel (void) const { return this->nnz(); }
@@ -864,16 +873,21 @@
 		rsb_err_t errval=RSB_ERR_NO_ERROR;
 		octave_sparse_rsb_matrix * m = NULL;
 		RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);
+		struct rsb_matrix_t*matrixp=NULL;
 		if(is_real_type())
-		m = new octave_sparse_rsb_matrix( rsb_clone_transformed(RSB_NUMERICAL_TYPE_DOUBLE,RSB_TRANSPOSITION_N,&alpha,this->A,RSBOI_EXPF ) );
+		{
+			errval = rsb_clone_transformed(&matrixp,RSB_NUMERICAL_TYPE_SAME_TYPE,RSB_TRANSPOSITION_N        , &alpha,this->A,RSBOI_EXPF);
+		}
 		else
 #if RSBOI_WANT_DOUBLE_COMPLEX
-		{Complex calpha;calpha+=alpha;
-		m = new octave_sparse_rsb_matrix( rsb_clone_transformed(RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX,RSB_TRANSPOSITION_N,&calpha,this->A,RSBOI_EXPF) );
+		{
+			Complex calpha;calpha+=alpha;
+			errval = rsb_clone_transformed(&matrixp,RSB_NUMERICAL_TYPE_SAME_TYPE,RSB_TRANSPOSITION_N,&calpha,this->A,RSBOI_EXPF);
 		}
 #else
 		{RSBOI_0_ERROR(RSBOI_0_NOCOERRMSG);}
 #endif
+		m = new octave_sparse_rsb_matrix( matrixp );
 		return m;
 	}
 
@@ -882,8 +896,10 @@
 	{
 		rsb_err_t errval=RSB_ERR_NO_ERROR;
 		octave_sparse_rsb_matrix * m = NULL;
+		struct rsb_matrix_t*matrixp=NULL;
 		RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);
-		m = new octave_sparse_rsb_matrix( rsb_clone_transformed(RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX,RSB_TRANSPOSITION_N,&alpha,this->A,RSBOI_EXPF) );
+		errval = rsb_clone_transformed(&matrixp,RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX,RSB_TRANSPOSITION_N,&alpha,this->A,RSBOI_EXPF);
+		m = new octave_sparse_rsb_matrix( matrixp );
 		return m;
 	}
 #endif
@@ -993,13 +1009,14 @@
 
 DEFUNOP (transpose, sparse_rsb_matrix)
 {
+	rsb_err_t errval=RSB_ERR_NO_ERROR;
 	RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);
 	CAST_UNOP_ARG (const octave_sparse_rsb_matrix&);
 	octave_sparse_rsb_matrix * m = new octave_sparse_rsb_matrix(v);
 	RSBOI_TODO("here, the best solution would be to use some get_transposed() function");
-	rsb_err_t errval=RSB_ERR_NO_ERROR;
 	if(!m)return m;
-	errval=rsb_transpose(&m->A);
+	//errval=rsb_transpose(&m->A);
+	errval = rsb_clone_transformed(&m->A,RSB_NUMERICAL_TYPE_SAME_TYPE,RSB_TRANSPOSITION_T,NULL,m->A,RSBOI_EXPF);
 	//errval=rsb_elemental_unop(m->A,RSB_ELOPF_TRANS);
 	RSBOI_PERROR(errval);
 	return m;
@@ -1010,10 +1027,11 @@
 	RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);
 	CAST_UNOP_ARG (const octave_sparse_rsb_matrix&);
 	octave_sparse_rsb_matrix * m = new octave_sparse_rsb_matrix(v);
+	rsb_err_t errval=RSB_ERR_NO_ERROR;
 	RSBOI_TODO("here, the best solution would be to use some get_transposed() function");
-	rsb_err_t errval=RSB_ERR_NO_ERROR;
 	if(!m)return m;
-	errval=rsb_htranspose(&m->A);
+	//errval=rsb_htranspose(&m->A);
+	errval = rsb_clone_transformed(&m->A,RSB_NUMERICAL_TYPE_SAME_TYPE,RSB_TRANSPOSITION_C,NULL,m->A,RSBOI_EXPF);
 	//errval=rsb_elemental_unop(m->A,RSB_ELOPF_HTRANS);
 	RSBOI_PERROR(errval);
 	return m;
@@ -1137,10 +1155,12 @@
 
 DEFASSIGNOP (assign, sparse_rsb_matrix, sparse_rsb_matrix)
 {
+	rsb_err_t errval=RSB_ERR_NO_ERROR;
 	RSBOI_FIXME("I dunno how to trigger this!");
 	CAST_BINOP_ARGS (octave_sparse_rsb_matrix &, const octave_sparse_rsb_matrix&);
 	RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);
-	rsb_assign(v1.A, v2.A);
+	//rsb_assign(v1.A, v2.A);
+	errval = rsb_clone_transformed(&v1.A,RSB_NUMERICAL_TYPE_SAME_TYPE,RSB_TRANSPOSITION_N,NULL,v2.A,RSBOI_EXPF);
 	return octave_value();
 }