@extra-array/search-infix
Version:
Finds first index of an infix.
40 lines (39 loc) • 996 B
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 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 };