UNPKG

@extra-array/search-infix-right

Version:
42 lines (41 loc) 1.03 kB
'use strict'; 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;