Skip to content

Commit 205cd21

Browse files
committed
Add helper function
1 parent 3daa3cf commit 205cd21

1 file changed

Lines changed: 9 additions & 15 deletions

File tree

jsrc/conversions.cpp

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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
369375
template <>
370376
[[nodiscard]] auto
371377
convert<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

Comments
 (0)