MCPcopy Create free account
hub / github.com/webpack/webpack-cli / myersX

Function myersX

packages/webpack-cli/src/webpack-cli.ts:330–425  ·  view source on GitHub ↗
(longer: string, shorter: string, peq: Uint32Array)

Source from the content-addressed store, hash-verified

328}
329
330function myersX(longer: string, shorter: string, peq: Uint32Array): number {
331 const n = shorter.length;
332 const m = longer.length;
333 const mhc: number[] = [];
334 const phc: number[] = [];
335 const horizontalSize = Math.ceil(n / 32);
336 const verticalSize = Math.ceil(m / 32);
337
338 for (let i = 0; i < horizontalSize; i++) {
339 phc[i] = -1;
340 mhc[i] = 0;
341 }
342
343 let j = 0;
344
345 for (; j < verticalSize - 1; j++) {
346 let mv = 0;
347 let pv = -1;
348 const start = j * 32;
349 const verticalLen = Math.min(32, m) + start;
350
351 for (let k = start; k < verticalLen; k++) {
352 peq[longer.charCodeAt(k)] |= 1 << k;
353 }
354
355 for (let i = 0; i < n; i++) {
356 const eq = peq[shorter.charCodeAt(i)];
357 const pb = (phc[(i / 32) | 0] >>> i) & 1;
358 const mb = (mhc[(i / 32) | 0] >>> i) & 1;
359 const xv = eq | mv;
360 const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
361 let ph = mv | ~(xh | pv);
362 let mh = pv & xh;
363
364 if ((ph >>> 31) ^ pb) {
365 phc[(i / 32) | 0] ^= 1 << i;
366 }
367
368 if ((mh >>> 31) ^ mb) {
369 mhc[(i / 32) | 0] ^= 1 << i;
370 }
371
372 ph = (ph << 1) | pb;
373 mh = (mh << 1) | mb;
374 pv = mh | ~(xv | ph);
375 mv = ph & xv;
376 }
377
378 for (let k = start; k < verticalLen; k++) {
379 peq[longer.charCodeAt(k)] = 0;
380 }
381 }
382
383 let mv = 0;
384 let pv = -1;
385 const start = j * 32;
386 const verticalLen = Math.min(32, m - start) + start;
387

Callers 1

distanceFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected