216
return haystack.indexOf(needle[0], offset);
217
}
219
>
if (needleLen > haystackLen - offset) {
220
>
return -1;
221
>
}
222
>
223
>
// find index of the subarray using boyer-moore-horspool algorithm
224
>
const table = indexOfTable.value;
225
>
table.fill(needle.length);
226
>
for (let i = 0; i < needle.length; i++) {
227
>
table[needle[i]] = needle.length - i - 1;
228
>
}
229
>
230
>
let i = offset + needle.length - 1;
231
>
let j = i;
232
>
let result = -1;
233
>
while (i < haystackLen) {
234
>
if (haystack[i] === needle[j]) {
235
>
if (j === 0) {
236
>
result = i;
237
>
break;
238
>
}
239
>
240
>
i--;
241
>
j--;
242
>
} else {
243
>
i += Math.max(needle.length - j, table[haystack[i]]);
244
>
j = needle.length - 1;
245
>
}
246
>
}
247
>
248
>
return result;
249
>
}
250
251
export function readUInt16LE(source: Uint8Array, offset: number): number {