@@ -129,16 +129,15 @@ convert<bool, X>(J jt, A w, void *yv) -> bool {
129129
130130template <typename T>
131131static auto
132- inplace_negate (T& u, int64_t n) {
133- std::transform (u, u + n, u, [](auto v) { return -v; });
132+ inplace_negate (T * u, int64_t n) {
133+ std::transform (u, u + n, u, [](auto v) { return -v; });
134134}
135135
136136template <>
137137[[nodiscard]] auto
138138convert<I, X>(J jt, A w, void *yv) -> bool {
139139 I u[XIDIG];
140- auto const v = AV (w);
141- std::transform (v, v + AN (w), static_cast <X *>(yv), [&](auto c) {
140+ auto const convert_one = [&](auto c) {
142141 auto const b = c == IMIN;
143142 auto d = b ? -(1 + c) : std::abs (c);
144143 int64_t length = 0 ;
@@ -151,8 +150,8 @@ convert<I, X>(J jt, A w, void *yv) -> bool {
151150 *u += b;
152151 if (0 > c) inplace_negate (u, XIDIG);
153152 return jtvec (jt, INT, length, u);
154- }) ;
155- return !jt->jerr ;
153+ };
154+ return convert<I, X>(jt, w, yv, convert_one) && !jt->jerr ;
156155}
157156
158157static X
@@ -239,14 +238,12 @@ convert<X, I>(J jt, A w, void *yv) -> bool {
239238template <>
240239[[nodiscard]] auto
241240convert<X, D>(J jt, A w, void *yv) -> bool {
242- auto const wv = XAV (w);
243- std::transform (wv, wv + AN (w), static_cast <D *>(yv), [](auto p) {
244- auto const c = AV (p)[AN (p)-1 ];
241+ return convert<X, D>(jt, w, yv, [](auto p) {
242+ auto const c = AV (p)[AN (p) - 1 ];
245243 if (c == XPINF) return inf;
246244 if (c == XNINF) return infm;
247245 return value_from_X<double >(p);
248246 });
249- return 1 ;
250247}
251248
252249template <>
@@ -297,10 +294,7 @@ convert<D, Q>(J jt, A w, void *yv, I mode) -> bool {
297294 q.d = jtca (jt, iv1);
298295 }
299296 }
300- if (neg) {
301- auto v = AV (q.n );
302- DQ (AN (q.n ), *v = -*v; ++v;);
303- }
297+ if (neg) inplace_negate (AV (q.n ), AN (q.n ));
304298 *x++ = q;
305299 }
306300 return !jt->jerr ;
0 commit comments