@@ -365,13 +365,17 @@ convert<Q, X>(J jt, A w, void *yv) -> bool {
365365 return !jt->jerr ;
366366}
367367
368+ template <typename T>
369+ auto
370+ set_real_part (Z *z, int64_t n, T *t) {
371+ for (int64_t i = 0 ; i < n; ++i) z[i].re = t[i];
372+ }
373+
368374// Imaginary parts have already been cleared
369375template <>
370376[[nodiscard]] auto
371377convert<D, Z>(J jt, A w, void *yv) -> bool {
372- D *wv = DAV (w);
373- Z *zv = static_cast <Z*>(yv);
374- DQ (AN (w), zv++->re = *wv++;);
378+ set_real_part (static_cast <Z*>(yv), AN (w), DAV (w));
375379 return 1 ;
376380}
377381
@@ -471,22 +475,12 @@ jtccvt(J jt, I tflagged, A w, A *y) {
471475 GATV (d, XNUM, n, r, s);
472476 return convert<bool , X>(jt, w, AV (d)) && convert<X, Q>(jt, d, yv);
473477 case CVCASE (FLX, B01X): std::copy_n (static_cast <B *>(wv), n, static_cast <D *>(yv)); return 1 ;
474- case CVCASE (CMPXX, B01X): {
475- Z *x = (Z *)yv;
476- B *v = (B *)wv;
477- DQ (n, x++->re = *v++;);
478- }
479- return 1 ;
478+ case CVCASE (CMPXX, B01X): set_real_part (static_cast <Z*>(yv), n, static_cast <B*>(wv)); return 1 ;
480479 case CVCASE (B01X, INTX): return convert<I, bool >(jt, w, yv);
481480 case CVCASE (XNUMX, INTX): return convert<I, X>(jt, w, yv);
482481 case CVCASE (RATX, INTX): GATV (d, XNUM, n, r, s); return convert<I, X>(jt, w, AV (d)) && convert<X, Q>(jt, d, yv);
483482 case CVCASE (FLX, INTX): std::copy_n (static_cast <I *>(wv), n, static_cast <D *>(yv)); return 1 ;
484- case CVCASE (CMPXX, INTX): {
485- Z *x = (Z *)yv;
486- I *v = static_cast <I *>(wv);
487- DQ (n, x++->re = (D)*v++;);
488- }
489- return 1 ;
483+ case CVCASE (CMPXX, INTX): set_real_part (static_cast <Z *>(yv), n, static_cast <I *>(wv)); return 1 ;
490484 case CVCASE (B01X, FLX): return convert<D, bool >(jt, w, yv, (I)jtinplace & JTNOFUZZ ? 0.0 : FUZZ);
491485 case CVCASE (INTX, FLX): return convert<D, I>(jt, w, yv, (I)jtinplace & JTNOFUZZ ? 0.0 : FUZZ);
492486 case CVCASE (XNUMX, FLX):
0 commit comments