MCPcopy Create free account
hub / github.com/WebReflection/hypersimple / OND

Function OND

index.js:300–366  ·  view source on GitHub ↗
(futureNodes, futureStart, rows, currentNodes, currentStart, cols, compare)

Source from the content-addressed store, hash-verified

298
299
300 var OND = function OND(futureNodes, futureStart, rows, currentNodes, currentStart, cols, compare) {
301 var length = rows + cols;
302 var v = [];
303 var d, k, r, c, pv, cv, pd;
304
305 outer: for (d = 0; d <= length; d++) {
306 /* istanbul ignore if */
307 if (d > SKIP_OND) return null;
308 pd = d - 1;
309 /* istanbul ignore next */
310
311 pv = d ? v[d - 1] : [0, 0];
312 cv = v[d] = [];
313
314 for (k = -d; k <= d; k += 2) {
315 if (k === -d || k !== d && pv[pd + k - 1] < pv[pd + k + 1]) {
316 c = pv[pd + k + 1];
317 } else {
318 c = pv[pd + k - 1] + 1;
319 }
320
321 r = c - k;
322
323 while (c < cols && r < rows && compare(currentNodes[currentStart + c], futureNodes[futureStart + r])) {
324 c++;
325 r++;
326 }
327
328 if (c === cols && r === rows) {
329 break outer;
330 }
331
332 cv[d + k] = c;
333 }
334 }
335
336 var diff = Array(d / 2 + length / 2);
337 var diffIdx = diff.length - 1;
338
339 for (d = v.length - 1; d >= 0; d--) {
340 while (c > 0 && r > 0 && compare(currentNodes[currentStart + c - 1], futureNodes[futureStart + r - 1])) {
341 // diagonal edge = equality
342 diff[diffIdx--] = SKIP;
343 c--;
344 r--;
345 }
346
347 if (!d) break;
348 pd = d - 1;
349 /* istanbul ignore next */
350
351 pv = d ? v[d - 1] : [0, 0];
352 k = c - r;
353
354 if (k === -d || k !== d && pv[pd + k - 1] < pv[pd + k + 1]) {
355 // vertical edge = insertion
356 r--;
357 diff[diffIdx--] = INSERTION;

Callers 1

smartDiffFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected