arma_hot inline void arrayops::convert(out_eT* dest, const in_eT* src, const uword n_elem) { uword i,j; for(i=0, j=1; j<n_elem; i+=2, j+=2) { const in_eT tmp_i = src[i]; const in_eT tmp_j = src[j]; // dest[i] = out_eT( tmp_i ); // dest[j] = out_eT( tmp_j ); dest[i] = (is_signed<out_eT>::value) ? out_eT( tmp_i ) : ( cond_rel< is_signed<in_eT>::value >::lt(tmp_i, in_eT(0)) ? out_eT(0) : out_eT(tmp_i) ); dest[j] = (is_signed<out_eT>::value) ? out_eT( tmp_j ) : ( cond_rel< is_signed<in_eT>::value >::lt(tmp_j, in_eT(0)) ? out_eT(0) : out_eT(tmp_j) ); } if(i < n_elem) { const in_eT tmp_i = src[i]; // dest[i] = out_eT( tmp_i ); dest[i] = (is_signed<out_eT>::value) ? out_eT( tmp_i ) : ( cond_rel< is_signed<in_eT>::value >::lt(tmp_i, in_eT(0)) ? out_eT(0) : out_eT(tmp_i) ); } }
arma_hot inline void arrayops::convert(out_eT* dest, const in_eT* src, const uword n_elem) { if(is_same_type<out_eT,in_eT>::value) { const out_eT* src2 = (const out_eT*)src; if(dest != src2) { arrayops::copy(dest, src2, n_elem); } return; } uword j; for(j=1; j<n_elem; j+=2) { const in_eT tmp_i = (*src); src++; const in_eT tmp_j = (*src); src++; // dest[i] = out_eT( tmp_i ); // dest[j] = out_eT( tmp_j ); (*dest) = (is_signed<out_eT>::value) ? out_eT( tmp_i ) : ( cond_rel< is_signed<in_eT>::value >::lt(tmp_i, in_eT(0)) ? out_eT(0) : out_eT(tmp_i) ); dest++; (*dest) = (is_signed<out_eT>::value) ? out_eT( tmp_j ) : ( cond_rel< is_signed<in_eT>::value >::lt(tmp_j, in_eT(0)) ? out_eT(0) : out_eT(tmp_j) ); dest++; } if((j-1) < n_elem) { const in_eT tmp_i = (*src); // dest[i] = out_eT( tmp_i ); (*dest) = (is_signed<out_eT>::value) ? out_eT( tmp_i ) : ( cond_rel< is_signed<in_eT>::value >::lt(tmp_i, in_eT(0)) ? out_eT(0) : out_eT(tmp_i) ); } }