Mercurial > forge
changeset 11654:53c5d7e812d4 octave-forge
compacting the implementations of transpose, htranspose, uminus.
author | michelemartone |
---|---|
date | Sat, 27 Apr 2013 07:22:14 +0000 |
parents | aff62b61b9e5 |
children | 6bbb1584d933 |
files | main/sparsersb/src/sparsersb.cc |
diffstat | 1 files changed, 18 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/main/sparsersb/src/sparsersb.cc Sat Apr 27 06:54:24 2013 +0000 +++ b/main/sparsersb/src/sparsersb.cc Sat Apr 27 07:22:14 2013 +0000 @@ -972,20 +972,20 @@ } #endif - octave_value rsboi_get_scaled_copy(const RSBOI_T alpha)const + octave_value rsboi_get_scaled_copy(const RSBOI_T alpha, rsb_trans_t transa=RSB_TRANSPOSITION_N)const { rsb_err_t errval=RSB_ERR_NO_ERROR; RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); struct rsb_mtx_t*mtxBp=NULL; if(is_real_type()) { - errval = rsb_mtx_clone(&mtxBp,RSB_NUMERICAL_TYPE_SAME_TYPE,RSB_TRANSPOSITION_N , &alpha,this->mtxAp,RSBOI_EXPF); + errval = rsb_mtx_clone(&mtxBp,RSB_NUMERICAL_TYPE_SAME_TYPE,transa, &alpha,this->mtxAp,RSBOI_EXPF); } else #if RSBOI_WANT_DOUBLE_COMPLEX { Complex calpha;calpha+=alpha; - errval = rsb_mtx_clone(&mtxBp,RSB_NUMERICAL_TYPE_SAME_TYPE,RSB_TRANSPOSITION_N,&calpha,this->mtxAp,RSBOI_EXPF); + errval = rsb_mtx_clone(&mtxBp,RSB_NUMERICAL_TYPE_SAME_TYPE,transa,&calpha,this->mtxAp,RSBOI_EXPF); } #else {RSBOI_0_ERROR(RSBOI_0_NOCOERRMSG);} @@ -1113,6 +1113,17 @@ return retval; } +octave_value cp_ubop(enum rsb_elopf_t opf, void*alphap=NULL)const +{ + RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); + rsb_err_t errval=RSB_ERR_NO_ERROR; + octave_sparsersb_mtx * m = new octave_sparsersb_mtx(*this); + if(!m)return m; + errval = rsb_mtx_upd_values(m->mtxAp,opf,alphap); + RSBOI_PERROR(errval); + return m; +} + private: DECLARE_OCTAVE_ALLOCATOR @@ -1206,38 +1217,22 @@ { RSBOI_WARN(RSBOI_O_MISSIMPERRMSG); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); - rsb_err_t errval=RSB_ERR_NO_ERROR; CAST_UNOP_ARG (const octave_sparsersb_mtx&); - octave_sparsersb_mtx * m = new octave_sparsersb_mtx(v); - if(!m)return m; - errval = rsb_mtx_upd_values(m->mtxAp,RSB_ELOPF_NEG,NULL); - return m; + return v.cp_ubop(RSB_ELOPF_NEG); } DEFUNOP (transpose, sparse_rsb_mtx) { - rsb_err_t errval=RSB_ERR_NO_ERROR; RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); CAST_UNOP_ARG (const octave_sparsersb_mtx&); - octave_sparsersb_mtx * m = new octave_sparsersb_mtx(v); - RSBOI_TODO("here, the best solution would be to use some get_transposed() function"); - if(!m)return m; - errval = rsb_mtx_clone(&m->mtxAp,RSB_NUMERICAL_TYPE_SAME_TYPE,RSB_TRANSPOSITION_T,NULL,m->mtxAp,RSBOI_EXPF); - RSBOI_PERROR(errval); - return m; + return v.rsboi_get_scaled_copy(rsboi_pone[0],RSB_TRANSPOSITION_T); } DEFUNOP (htranspose, sparse_rsb_mtx) { RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); CAST_UNOP_ARG (const octave_sparsersb_mtx&); - octave_sparsersb_mtx * m = new octave_sparsersb_mtx(v); - rsb_err_t errval=RSB_ERR_NO_ERROR; - RSBOI_TODO("here, the best solution would be to use some get_transposed() function"); - if(!m)return m; - errval = rsb_mtx_clone(&m->mtxAp,RSB_NUMERICAL_TYPE_SAME_TYPE,RSB_TRANSPOSITION_C,NULL,m->mtxAp,RSBOI_EXPF); - RSBOI_PERROR(errval); - return m; + return v.rsboi_get_scaled_copy(rsboi_pone[0],RSB_TRANSPOSITION_C); } octave_value rsboi_spsv(const octave_sparsersb_mtx&v1, const octave_matrix&v2,rsb_trans_t transa) @@ -1538,13 +1533,8 @@ { CAST_BINOP_ARGS (const octave_sparsersb_mtx &, const octave_scalar&); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); - octave_sparsersb_mtx * m = new octave_sparsersb_mtx(v1); - rsb_err_t errval=RSB_ERR_NO_ERROR; RSBOI_T alpha=v2.scalar_value(); - if(!m)return m; - errval = rsb_mtx_upd_values(m->mtxAp,RSB_ELOPF_POW,&alpha); - RSBOI_PERROR(errval); - return m; + return v1.cp_ubop(RSB_ELOPF_POW,&alpha); } #ifdef RSB_FULLY_IMPLEMENTED