[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.
|