@extra-array/search-infix-right
Version:
Finds last index of an infix.
42 lines (41 loc) • 1.03 kB
JavaScript
;
function id(v) {
return v;
}
function cmp(a, b) {
return a < b ? -1 : (a > b ? 1 : 0);
}
function from$$1(x) {
return Array.isArray(x) ? x : [...x];
}
function* searchInfixAll(x, y, fc, fm = null) {
var fc = fc || cmp, fm = fm || id;
var y1 = from$$1(y), Y = y1.length;
if (Y === 0)
yield 0;
var y1 = y1.map(fm, null);
var m = new Array(Y).fill(false);
var i = -1, J = 0;
for (var u of x) {
var u1 = fm(u, ++i, x);
for (var j = J; j > 0; j--)
m[j] = m[j - 1] && fc(u1, y1[j]) === 0;
m[0] = fc(u1, y1[0]) === 0;
J = Math.min(J + 1, Y - 1);
if (m[Y - 1])
yield i - Y + 1;
}
}
function last(x, vd) {
var v = vd;
for (var v of x)
;
return v;
}
function searchInfixRight$1(x, y, fc, fm = null) {
return last(searchInfixAll(x, y, fc, fm), -1);
}
function searchInfixRight(x, y, fc = null, fm = null) {
return searchInfixRight$1(x, y, fc, fm);
}
module.exports = searchInfixRight;