[pure-lang-svn] SF.net SVN: pure-lang:[819] pure/trunk/runtime.cc
Status: Beta
Brought to you by:
agraef
From: <ag...@us...> - 2008-09-21 22:32:36
|
Revision: 819 http://pure-lang.svn.sourceforge.net/pure-lang/?rev=819&view=rev Author: agraef Date: 2008-09-21 22:32:31 +0000 (Sun, 21 Sep 2008) Log Message: ----------- Bugfixes. Modified Paths: -------------- pure/trunk/runtime.cc Modified: pure/trunk/runtime.cc =================================================================== --- pure/trunk/runtime.cc 2008-09-21 22:10:36 UTC (rev 818) +++ pure/trunk/runtime.cc 2008-09-21 22:32:31 UTC (rev 819) @@ -4107,25 +4107,29 @@ } extern "C" -pure_expr *matrix_elem_at(pure_expr *x, int32_t i) +pure_expr *matrix_elem_at(pure_expr *x, int32_t _i) { switch (x->tag) { case EXPR::MATRIX: { gsl_matrix_symbolic *m = (gsl_matrix_symbolic*)x->data.mat.p; - return m->data[i]; + const size_t i = _i/m->size2, j = _i%m->size2, k = i*m->tda+j; + return m->data[k]; } #ifdef HAVE_GSL case EXPR::DMATRIX: { gsl_matrix *m = (gsl_matrix*)x->data.mat.p; - return pure_double(m->data[i]); + const size_t i = _i/m->size2, j = _i%m->size2, k = i*m->tda+j; + return pure_double(m->data[k]); } case EXPR::CMATRIX: { gsl_matrix_complex *m = (gsl_matrix_complex*)x->data.mat.p; - return make_complex(m->data[2*i], m->data[2*i+1]); + const size_t i = _i/m->size2, j = _i%m->size2, k = 2*(i*m->tda+j); + return make_complex(m->data[k], m->data[k+1]); } case EXPR::IMATRIX: { gsl_matrix_int *m = (gsl_matrix_int*)x->data.mat.p; - return pure_int(m->data[i]); + const size_t i = _i/m->size2, j = _i%m->size2, k = i*m->tda+j; + return pure_int(m->data[k]); } #endif default: @@ -4139,23 +4143,23 @@ switch (x->tag) { case EXPR::MATRIX: { gsl_matrix_symbolic *m = (gsl_matrix_symbolic*)x->data.mat.p; - size_t k = i*m->tda+j; + const size_t k = i*m->tda+j; return m->data[k]; } #ifdef HAVE_GSL case EXPR::DMATRIX: { gsl_matrix *m = (gsl_matrix*)x->data.mat.p; - size_t k = i*m->tda+j; + const size_t k = i*m->tda+j; return pure_double(m->data[k]); } case EXPR::CMATRIX: { gsl_matrix_complex *m = (gsl_matrix_complex*)x->data.mat.p; - size_t k = 2*(i*m->tda+j); + const size_t k = 2*(i*m->tda+j); return make_complex(m->data[k], m->data[k+1]); } case EXPR::IMATRIX: { gsl_matrix_int *m = (gsl_matrix_int*)x->data.mat.p; - size_t k = i*m->tda+j; + const size_t k = i*m->tda+j; return pure_int(m->data[k]); } #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |