@@ -55,13 +55,10 @@ convert(J jt, array w, void *yv, Transform t) -> bool {
5555
5656static B
5757jtBfromD (J jt, A w, void *yv, D fuzz) {
58- B *x;
59- D p, *v;
60- I n;
61- n = AN (w);
62- v = DAV (w);
63- x = (B *)yv;
64- DQ (n, p = *v++; if (p < -2 || 2 < p) return 0 ; // handle infinities
58+ auto n = AN (w);
59+ auto v = DAV (w);
60+ auto x = (B *)yv;
61+ DQ (n, auto p = *v++; if (p < -2 || 2 < p) return 0 ; // handle infinities
6562 I val = 2 ;
6663 val = (p == 0 ) ? 0 : val;
6764 val = FIEQ (p, 1.0 , fuzz) ? 1 : val;
@@ -72,15 +69,13 @@ jtBfromD(J jt, A w, void *yv, D fuzz) {
7269
7370static B
7471jtIfromD (J jt, A w, void *yv, D fuzz) {
75- D p, q, *v;
76- I i, n, *x;
77- n = AN (w);
78- v = DAV (w);
79- x = (I *)yv;
80- for (i = 0 ; i < n; ++i) {
81- p = v[i];
82- q = jround (p);
83- I rq = (I)q;
72+ auto n = AN (w);
73+ auto v = DAV (w);
74+ auto x = (I *)yv;
75+ for (int64_t i = 0 ; i < n; ++i) {
76+ auto const p = v[i];
77+ auto const q = jround (p);
78+ I rq = (I)q;
8479 if (!(p == q || FIEQ (p, q, fuzz))) return 0 ; // must equal int, possibly out of range
8580 // out-of-range values don't convert, handle separately
8681 if (p < (D)IMIN) {
@@ -98,21 +93,18 @@ jtIfromD(J jt, A w, void *yv, D fuzz) {
9893
9994static B
10095jtDfromZ (J jt, A w, void *yv, D fuzz) {
101- D d, *x;
102- I n;
103- Z *v;
104- n = AN (w);
105- v = ZAV (w);
106- x = (D *)yv;
96+ auto const n = AN (w);
97+ auto const *v = ZAV (w);
98+ auto x = (D *)yv;
10799 if (fuzz)
108100 DQ (
109- n, d = ABS (v->im ); if (d != inf && d <= fuzz * ABS (v->re )) {
101+ n, auto d = std::abs (v->im ); if (d != inf && d <= fuzz * std::abs (v->re )) {
110102 *x++ = v->re ;
111103 v++;
112104 } else return 0 ;)
113105 else
114106 DQ (
115- n, d = v->im ; if (!d ) {
107+ n, if (! v->im ) {
116108 *x++ = v->re ;
117109 v++;
118110 } else return 0 ;);
@@ -161,9 +153,7 @@ jtXfromI(J jt, A w, void *yv) {
161153static X
162154jtxd1 (J jt, D p, I mode) {
163155 PROLOG (0052 );
164- A t;
165- D d, e = jttfloor (jt, p), q, r;
166- I m, *u;
156+ D e = jttfloor (jt, p);
167157 switch (mode) {
168158 case XMFLR: p = e; break ;
169159 case XMCEIL: p = ceil (p); break ;
@@ -176,15 +166,16 @@ jtxd1(J jt, D p, I mode) {
176166 }
177167 if (p == inf) return jtvci (jt, XPINF);
178168 if (p == -inf) return jtvci (jt, XNINF);
169+ A t;
179170 GAT0 (t, INT, 30 , 1 );
180- u = AV (t);
181- m = 0 ;
182- d = ABS (p);
171+ auto u = AV (t);
172+ int64_t m = 0 ;
173+ auto d = std::abs (p);
183174 while (0 < d) {
184- q = floor (d / XBASE);
185- r = d - q * XBASE;
186- u[m++] = (I)r;
187- d = q;
175+ auto const q = floor (d / XBASE);
176+ auto const r = d - q * XBASE;
177+ u[m++] = (I)r;
178+ d = q;
188179 if (m == AN (t)) {
189180 RZ (t = jtext (jt, 0 , t));
190181 u = AV (t);
@@ -207,13 +198,9 @@ jtXfromD(J jt, A w, void *yv, I mode) {
207198
208199static B
209200jtBfromX (J jt, A w, void *yv) {
210- A q;
211- B *x;
212- I e;
213- X *v;
214- v = XAV (w);
215- x = (B *)yv;
216- DO (AN (w), q = v[i]; e = AV (q)[0 ]; if ((AN (q) ^ 1 ) | (e & -2 )) return 0 ; x[i] = (B)e;);
201+ auto v = XAV (w);
202+ auto x = (B *)yv;
203+ DO (AN (w), A q = v[i]; I e = AV (q)[0 ]; if ((AN (q) ^ 1 ) | (e & -2 )) return 0 ; x[i] = (B)e;);
217204 return 1 ;
218205}
219206
@@ -227,15 +214,14 @@ value_from_X(X p) -> T {
227214
228215static B
229216jtIfromX (J jt, A w, void *yv) {
230- I a, i, m, n, *u, *x;
231- X c, p, q, *v;
232- v = XAV (w);
233- x = (I *)yv;
234- n = AN (w);
217+ auto v = XAV (w);
218+ auto x = (I *)yv;
219+ auto n = AN (w);
220+ X p, q;
235221 if (!(p = jtxc (jt, IMAX))) return 0 ;
236222 if (!(q = jtxminus (jt, jtnegate (jt, p), jtxc (jt, 1L )))) return 0 ;
237- for (i = 0 ; i < n; ++i) {
238- c = v[i];
223+ for (int64_t i = 0 ; i < n; ++i) {
224+ auto c = v[i];
239225 if (!(1 != jtxcompare (jt, q, c) && 1 != jtxcompare (jt, c, p))) return 0 ;
240226 x[i] = value_from_X<int64_t >(c);
241227 }
@@ -359,10 +345,8 @@ jtDfromQ(J jt, A w, void *yv) {
359345
360346static B
361347jtXfromQ (J jt, A w, void *yv) {
362- Q *v;
363- X *x;
364- v = QAV (w);
365- x = (X *)yv;
348+ auto v = QAV (w);
349+ auto x = (X *)yv;
366350 DQ (AN (w), if (!(jtequ (jt, iv1, v->d ))) return 0 ; *x++ = v->n ; ++v;);
367351 return !jt->jerr ;
368352}
@@ -548,9 +532,8 @@ jtccvt(J jt, I tflagged, A w, A *y) {
548532A
549533jtcvt (J jt, I t, A w) {
550534 A y;
551- B b;
552- b = jtccvt (jt, t, w, &y);
553- ASSERT (b != 0 , EVDOMAIN);
535+ bool const b = jtccvt (jt, t, w, &y);
536+ ASSERT (b, EVDOMAIN);
554537 return y;
555538}
556539
@@ -635,14 +618,11 @@ jtpcvt(J jt, I t, A w) {
635618
636619A
637620jtcvt0 (J jt, A w) {
638- I n, t;
639- D *u;
640- t = AT (w);
641- n = AN (w);
621+ auto const t = AT (w);
622+ auto const n = (t & CMPX) ? 2 * AN (w) : AN (w);
642623 if (n && t & FL + CMPX) {
643- if (t & CMPX) n += n;
644- u = DAV (w);
645- DQ (n, if (*u == 0.0 ) *u = 0.0 ; ++u;);
624+ auto u = DAV (w);
625+ std::transform (u, u + n, u, [](auto v) { return v == 0.0 ? 0.0 : v; });
646626 }
647627 return w;
648628} /* convert -0 to 0 in place */
@@ -655,24 +635,24 @@ jtxco1(J jt, A w) {
655635
656636A
657637jtxco2 (J jt, A a, A w) {
658- A z;
659- I j, n, r, t;
660- n = AN (w);
661- r = AR (w);
662- t = AT (w);
663- ASSERT (t & DENSE, EVNONCE);
638+ ASSERT (AT (w) & DENSE, EVNONCE);
639+ I j;
664640 RE (j = jti0 (jt, a));
665641 switch (j) {
666642 case -2 : return jtaslash1 (jt, CDIV, w);
667643 case -1 : return jtbcvt (jt, 1 , w);
668644 case 1 : return jtxco1 (jt, w);
669645 case 2 :
670- if (!(t & RAT)) RZ (w = jtcvt (jt, RAT, w));
671- GATV (z, XNUM, 2 * n, r + 1 , AS (w));
672- AS (z)[r] = 2 ;
673- memcpy (AV (z), AV (w), 2 * n * SZI);
674- return z;
675- default :
676- ASSERT (0 , EVDOMAIN);
646+ if (!(AT (w) & RAT)) RZ (w = jtcvt (jt, RAT, w));
647+ {
648+ auto const n = AN (w);
649+ auto const r = AR (w);
650+ A z;
651+ GATV (z, XNUM, 2 * n, r + 1 , AS (w));
652+ AS (z)[r] = 2 ;
653+ memcpy (AV (z), AV (w), 2 * n * SZI);
654+ return z;
655+ }
656+ default : ASSERT (0 , EVDOMAIN);
677657 }
678658}
0 commit comments