changeset 11335:a9cdb3c433f4 octave-forge

adapting sparsersb to cope without rsb_mtx_t definition, but only via (the new) rsb_mtx_get_info_str.
author michelemartone
date Thu, 27 Dec 2012 22:11:24 +0000
parents b2b6748b0a9d
children a7de0aafd809
files main/sparsersb/src/sparsersb.cc
diffstat 1 files changed, 20 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/main/sparsersb/src/sparsersb.cc	Thu Dec 27 19:44:36 2012 +0000
+++ b/main/sparsersb/src/sparsersb.cc	Thu Dec 27 22:11:24 2012 +0000
@@ -380,12 +380,16 @@
 		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(); }
-		octave_idx_type nnz (void) const { RSBOI_0_EMCHECK(this->A);return this->A->nnz; }
+		octave_idx_type nnz (void) const { rsb_nnz_idx_t Annz=0; RSBOI_0_EMCHECK(this->A); rsb_mtx_get_info(this->A,RSB_MIF_MATRIX_NNZ__TO__RSB_NNZ_INDEX_T,&Annz);  return Annz;}
 		dim_vector dims (void) const { return (dim_vector(this->rows(),this->cols())); }
 		octave_idx_type dim1 (void) const { return this->rows(); }
 		octave_idx_type dim2 (void) const { return this->cols(); }
-		octave_idx_type rows (void) const { RSBOI_0_EMCHECK(this->A);return this->A->nr; }
-		octave_idx_type cols (void) const { RSBOI_0_EMCHECK(this->A);return this->A->nc; }
+		octave_idx_type rows (void) const { rsb_coo_idx_t Anr=0; RSBOI_0_EMCHECK(this->A); rsb_mtx_get_info(this->A,RSB_MIF_MATRIX_ROWS__TO__RSB_COO_INDEX_T,&Anr);  return Anr;}
+		octave_idx_type cols (void) const { rsb_coo_idx_t Anc=0; RSBOI_0_EMCHECK(this->A); rsb_mtx_get_info(this->A,RSB_MIF_MATRIX_COLS__TO__RSB_COO_INDEX_T,&Anc);  return Anc;}
+		rsb_flags_t rsbflags(void) const { rsb_flags_t Aflags=0; RSBOI_0_EMCHECK(this->A); rsb_mtx_get_info(this->A,RSB_MIF_MATRIX_FLAGS__TO__RSB_FLAGS_T,&Aflags);  return Aflags;}
+		rsb_type_t rsbtype(void) const { rsb_type_t Atype=0; RSBOI_0_EMCHECK(this->A); rsb_mtx_get_info(this->A,RSB_MIF_MATRIX_TYPECODE__TO__RSB_TYPE_T,&Atype);  return Atype;}
+		//octave_idx_type rows (void) const { RSBOI_0_EMCHECK(this->A);return this->A->nr; }
+		//octave_idx_type cols (void) const { RSBOI_0_EMCHECK(this->A);return this->A->nc; }
 		octave_idx_type columns (void) const { return this->cols(); }
 		octave_idx_type nzmax (void) const { return this->nnz(); }
 		octave_idx_type capacity (void) const { return this->nnz(); }
@@ -599,10 +603,10 @@
 
 		bool is_map (void) const { return true; }
 		bool is_sparse_type (void) const { RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return true; }
-		bool is_real_type (void) const { RSBOI_0_EMCHECK(this->A); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return this->A->typecode==RSB_NUMERICAL_TYPE_DOUBLE?true:false; }
-		bool is_diagonal (void) const { RSBOI_0_EMCHECK(this->A); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->A->flags,RSB_FLAG_DIAGONAL)?true:false; }/* FIXME: new: not sure whether this is ever called */
-		bool is_lower_triangular (void) const { RSBOI_0_EMCHECK(this->A); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->A->flags,RSB_FLAG_LOWER_TRIANGULAR)?true:false; }/* FIXME: new: not sure whether this is ever called */
-		bool is_upper_triangular (void) const { RSBOI_0_EMCHECK(this->A); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->A->flags,RSB_FLAG_UPPER_TRIANGULAR)?true:false; }/* FIXME: new: not sure whether this is ever called */
+		bool is_real_type (void) const { RSBOI_0_EMCHECK(this->A); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return this->rsbtype()==RSB_NUMERICAL_TYPE_DOUBLE?true:false; }
+		bool is_diagonal (void) const { RSBOI_0_EMCHECK(this->A); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_DIAGONAL)?true:false; }/* FIXME: new: not sure whether this is ever called */
+		bool is_lower_triangular (void) const { RSBOI_0_EMCHECK(this->A); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_LOWER_TRIANGULAR)?true:false; }/* FIXME: new: not sure whether this is ever called */
+		bool is_upper_triangular (void) const { RSBOI_0_EMCHECK(this->A); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_UPPER_TRIANGULAR)?true:false; }/* FIXME: new: not sure whether this is ever called */
 		bool is_complex_type (void) const { RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); return !is_real_type(); }
 		bool is_bool_type (void) const { return false; }
 		bool is_integer_type (void) const { return false; }
@@ -613,11 +617,11 @@
 			RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);
 		       	if(this->A 
 #if RSBOI_WANT_SYMMETRY
-				&& ((!RSB_DO_FLAG_HAS(this->A->flags,RSB_FLAG_SYMMETRIC)) || RSB_DO_FLAG_HAS(this->A->flags,RSB_FLAG_DIAGONAL))
+				&& ((!RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_SYMMETRIC)) || RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_DIAGONAL))
 #endif
 			  )
 			{
-				return RSB_DO_FLAG_HAS(this->A->flags,RSB_FLAG_TRIANGULAR)?RSB_BOOL_TRUE:RSB_BOOL_FALSE;
+				return RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_TRIANGULAR)?RSB_BOOL_TRUE:RSB_BOOL_FALSE;
 			}
 			else
 			       	return RSB_BOOL_FALSE;
@@ -781,7 +785,8 @@
 			Array<RSBOI_T> VA( dim_vector(1,(ic?2:1)*nnz) );
 			std::string c=ic?"complex":"real";
 			char ss[RSBOI_INFOBUF];
-			snprintf(ss,sizeof(ss),RSB_PRINTF_MATRIX_SUMMARY_ARGS(this->A));
+			//snprintf(ss,sizeof(ss),RSB_PRINTF_MATRIX_SUMMARY_ARGS(this->A));
+			rsb_mtx_get_info_str(this->A,"RSB_MIF_MATRIX_INFO__TO__CHAR_P",ss,RSBOI_INFOBUF);
 			RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);
 			coo.VA=(RSBOI_T*)VA.data(),coo.IA=(rsb_coo_idx_t*)IA.data(),coo.JA=(rsb_coo_idx_t*)JA.data();
 #if RSBOI_WANT_SYMMETRY
@@ -798,8 +803,8 @@
 				", nnz = "<<nnz<<
 #if RSBOI_WANT_SYMMETRY
 				", symm = "<<
-				(RSB_DO_FLAG_HAS(this->A->flags,RSB_FLAG_SYMMETRIC)?"S":
-				(RSB_DO_FLAG_HAS(this->A->flags,RSB_FLAG_SYMMETRIC)?"H":"U"))
+				(RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_SYMMETRIC)?"S":
+				(RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_SYMMETRIC)?"H":"U"))
 				<< // FIXME: need a mechanism to print out these flags from rsb itself
 #endif
 				" ["<<100.0*(((RSBOI_T)nnz)/((RSBOI_T)coo.m))/coo.k<<
@@ -1608,7 +1613,7 @@
 		rsb_real_t miv=RSBOI_ZERO;/* FIXME: this is extreme danger! */
 		const struct rsb_mtx_t*matrix=((octave_sparse_rsb_mtx*)(args(0).internal_rep()))->A;
 		if(!matrix)goto ret;/* FIXME: error handling missing here */
-		errval = rsb_mtx_get_info_str(matrix,mis,&miv);
+		errval = rsb_mtx_get_info_str(matrix,mis,&miv,0);
 		/* FIXME: serious error handling missing here */
 		if(RSBOI_SOME_ERROR(errval))
 			retval.append(std::string("Error returned from rsb_mtx_get_info_from_string()"));
@@ -1633,7 +1638,8 @@
 			const struct rsb_mtx_t*matrix=NULL;//((octave_sparse_rsb_mtx)(args(0).get_rep())).A;
 			matrix=((octave_sparse_rsb_mtx*)(args(0).internal_rep()))->A;
 			if(!matrix)goto ret;/* FIXME: error handling missing here */
-			snprintf(ss,sizeof(ss),RSB_PRINTF_MATRIX_SUMMARY_ARGS(matrix));
+			//snprintf(ss,sizeof(ss),RSB_PRINTF_MATRIX_SUMMARY_ARGS(matrix));
+			rsb_mtx_get_info_str(matrix,"RSB_MIF_MATRIX_INFO__TO__CHAR_P",ss,RSBOI_INFOBUF);
 			/* FIXME: to add interpretation */
 			RSBOI_WARN(RSBOI_0_UNFFEMSG);/* FIXME: this is yet unfinished */
 			octave_stdout << "Matrix information (in the future, supplementary information may be returned, as more inquiry functionality will be implemented):\n" << ss << "\n";