LTFAT_API int LTFAT_NAME(real2complex_array)(const LTFAT_REAL* in, ltfat_int L, LTFAT_COMPLEX* out) { LTFAT_REAL (*outTmp)[2]; int status = LTFATERR_SUCCESS; CHECKNULL(in); CHECKNULL(out); CHECK(LTFATERR_BADSIZE, L > 0, "L must be positive"); outTmp = (LTFAT_REAL(*)[2]) out; if (in == (LTFAT_REAL*)out) { // Go from the back to avoid overwriting input for (ltfat_int ii = L - 1; ii >= 0; ii--) { outTmp[ii][0] = in[ii]; outTmp[ii][1] = 0.0; } } else { for (ltfat_int ii = 0; ii < L; ii++) { outTmp[ii][0] = in[ii]; outTmp[ii][1] = 0.0; } } error: return status; }
LTFAT_EXTERN void LTFAT_NAME(array2complex)(LTFAT_TYPE *in, LTFAT_COMPLEXH *out, const size_t L) { #ifdef LTFAT_COMPLEXTYPE if(in==(LTFAT_TYPE*)out) { return; } else { memcpy(out,in,L*sizeof(LTFAT_COMPLEXH)); } #else if(in==(LTFAT_TYPE*)out) { // This should produce an error } else { LTFAT_REAL (*outTmp)[2] = (LTFAT_REAL(*)[2]) out; for(size_t ii=0;ii<L;ii++) { outTmp[ii][0] = in[ii]; outTmp[ii][1] = (LTFAT_TYPE) 0.0; } } #endif }