| 12008 | |
| 12009 | extern "C" |
| 12010 | pure_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 | |
| 12043 | extern "C" |
| 12044 | pure_expr *matrix_from_int64_array(uint32_t n1, uint32_t n2, void *p) |
nothing calls this directly
no test coverage detected