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

Function matrix_from_complex_float_array

pure/runtime.cc:12010–12041  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12008
12009extern "C"
12010pure_expr *matrix_from_complex_float_array(uint32_t n1, uint32_t n2, void *p)
12011{
12012 if (n1 == 0 || n2 == 0) // empty matrix
12013 return pure_complex_matrix(create_complex_matrix(n1, n2));
12014 if (!p)
12015 p = calloc(2*n1*n2, sizeof(double));
12016 else {
12017 void *q = malloc(2*n1*n2*sizeof(double));
12018 float *p1 = (float*)p; double *q1 = (double*)q;
12019 for (size_t i = 0; i < 2*n1*n2; i++) q1[i] = (double)p1[i];
12020 p = q;
12021 }
12022 if (!p) return 0;
12023 gsl_matrix_complex_view v =
12024 gsl_matrix_complex_view_array((double*)p, n1, n2);
12025 // take a copy of the view matrix
12026 gsl_matrix_complex *m =
12027 (gsl_matrix_complex*)malloc(sizeof(gsl_matrix_complex));
12028 gsl_block_complex *b = (gsl_block_complex*)malloc(sizeof(gsl_block_complex));
12029 assert(m && b && v.matrix.data);
12030 *m = v.matrix;
12031 b->size = n1*n2;
12032 b->data = m->data;
12033 m->block = b;
12034 pure_expr *x = new_expr();
12035 x->tag = EXPR::CMATRIX;
12036 x->data.mat.p = m;
12037 x->data.mat.refc = new uint32_t;
12038 *x->data.mat.refc = 1;
12039 MEMDEBUG_NEW(x)
12040 return x;
12041}
12042
12043extern "C"
12044pure_expr *matrix_from_int64_array(uint32_t n1, uint32_t n2, void *p)

Callers

nothing calls this directly

Calls 4

pure_complex_matrixFunction · 0.85
new_exprFunction · 0.85
create_complex_matrixFunction · 0.70

Tested by

no test coverage detected