Skip to content

Commit e179cb9

Browse files
committed
Use helper functions more
1 parent 205cd21 commit e179cb9

1 file changed

Lines changed: 8 additions & 14 deletions

File tree

jsrc/conversions.cpp

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -129,16 +129,15 @@ convert<bool, X>(J jt, A w, void *yv) -> bool {
129129

130130
template <typename T>
131131
static 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

136136
template <>
137137
[[nodiscard]] auto
138138
convert<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

158157
static X
@@ -239,14 +238,12 @@ convert<X, I>(J jt, A w, void *yv) -> bool {
239238
template <>
240239
[[nodiscard]] auto
241240
convert<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

252249
template <>
@@ -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

Comments
 (0)