UNPKG

@extra-array/search-infix

Version:

Finds first index of an infix.

40 lines (39 loc) 996 B
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 head(x, vd) { for (var v of x) return v; return vd; } 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 searchInfix$1(x, y, fc, fm = null) { return head(searchInfixAll(x, y, fc, fm), -1); } function searchInfix(x, y, fc = null, fm = null) { return searchInfix$1(x, y, fc, fm); } export { searchInfix as default };