MCPcopy Create free account
hub / github.com/agraef/pure-lang / matrix_from_float_array

Function matrix_from_float_array

pure/runtime.cc:11978–12007  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11976
11977extern "C"
11978pure_expr *matrix_from_float_array(uint32_t n1, uint32_t n2, void *p)
11979{
11980 if (n1 == 0 || n2 == 0) // empty matrix
11981 return pure_double_matrix(create_double_matrix(n1, n2));
11982 if (!p)
11983 p = calloc(n1*n2, sizeof(double));
11984 else {
11985 void *q = malloc(n1*n2*sizeof(double));
11986 float *p1 = (float*)p; double *q1 = (double*)q;
11987 for (size_t i = 0; i < n1*n2; i++) q1[i] = (double)p1[i];
11988 p = q;
11989 }
11990 if (!p) return 0;
11991 gsl_matrix_view v = gsl_matrix_view_array((double*)p, n1, n2);
11992 // take a copy of the view matrix
11993 gsl_matrix *m = (gsl_matrix*)malloc(sizeof(gsl_matrix));
11994 gsl_block *b = (gsl_block*)malloc(sizeof(gsl_block));
11995 assert(m && b && v.matrix.data);
11996 *m = v.matrix;
11997 b->size = n1*n2;
11998 b->data = m->data;
11999 m->block = b;
12000 pure_expr *x = new_expr();
12001 x->tag = EXPR::DMATRIX;
12002 x->data.mat.p = m;
12003 x->data.mat.refc = new uint32_t;
12004 *x->data.mat.refc = 1;
12005 MEMDEBUG_NEW(x)
12006 return x;
12007}
12008
12009extern "C"
12010pure_expr *matrix_from_complex_float_array(uint32_t n1, uint32_t n2, void *p)

Callers 1

lv2pure_getFunction · 0.85

Calls 4

pure_double_matrixFunction · 0.85
gsl_matrix_view_arrayFunction · 0.85
new_exprFunction · 0.85
create_double_matrixFunction · 0.70

Tested by

no test coverage detected