11
22#include < algorithm>
3+ #include < functional>
34#include < iterator>
45
6+ #include " algorithm.hpp"
57#include " array.hpp"
68
79/* * @file */
@@ -75,7 +77,7 @@ jttks(J jt, array a, array w) { // take_sparse
7577 s = AV (y);
7678
7779 // TODO: rename b when we figure out what it is doing
78- auto const b = std::mismatch (u + m, u + r, s + m). first != u + r;
80+ auto const b = algo::is_mismatched (u + m, u + r, s + m);
7981
8082 if (b) {
8183 jt->fill = SPA (wp, e);
@@ -87,7 +89,7 @@ jttks(J jt, array a, array w) { // take_sparse
8789 x = SPA (wp, x);
8890
8991 // TODO: rename c when we figure out what it is doing
90- if (auto const c = std::mismatch (u, u + m, s). first != u + m ; c) {
92+ if (auto const c = algo::is_mismatched (u, u + m, s); c) {
9193 A j;
9294 C *xv, *yv;
9395 I d, i, *iv, *jv, k, n, t;
@@ -104,22 +106,19 @@ jttks(J jt, array a, array w) { // take_sparse
104106 xv = CAV (x);
105107 for (i = 0 ; i < n; ++i) {
106108
107- // this is std::mismatch3 (or std::zip_find3)
108- bool cc = 0 ;
109- for (int64_t i = 0 ; i < m; ++i) {
110- t = u[i];
111- if (0 > t ? iv[i] < t + s[i] : iv[i] >= t) {
112- cc = true ;
113- break ;
114- }
115- }
109+ auto const cc = algo::zip_found (
110+ [](auto a, auto b, auto c) { return 0 > a ? c < a + b : c >= a; },
111+ u, u + m, s, iv);
116112
117113 if (!cc) {
118114 ++d;
119115 memcpy (yv, xv, k);
120116 yv += k;
121- // TODO: use algorithm created above
122- DO (m, t = u[i]; *jv++ = 0 > t ? iv[i] - (t + s[i]) : iv[i];);
117+ // TODO: create variadic `algo::transform`
118+ for (int64_t i = 0 ; i < m; ++i) {
119+ t = u[i];
120+ *jv++ = 0 > u[i] ? iv[i] - (u[i] + s[i]) : iv[i];
121+ }
123122 }
124123 iv += m;
125124 xv += k;
0 commit comments