UNPKG

@extra-array/search-infix-all

Version:
32 lines (31 loc) 834 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* searchInfixAll$1(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 searchInfixAll(x, y, fc = null, fm = null) { return [...searchInfixAll$1(x, y, fc, fm)]; } export { searchInfixAll as default };