| 216 | var SKIP_OND = 50; |
| 217 | |
| 218 | var HS = function HS(futureNodes, futureStart, futureEnd, futureChanges, currentNodes, currentStart, currentEnd, currentChanges) { |
| 219 | var k = 0; |
| 220 | /* istanbul ignore next */ |
| 221 | |
| 222 | var minLen = futureChanges < currentChanges ? futureChanges : currentChanges; |
| 223 | var link = Array(minLen++); |
| 224 | var tresh = Array(minLen); |
| 225 | tresh[0] = -1; |
| 226 | |
| 227 | for (var i = 1; i < minLen; i++) { |
| 228 | tresh[i] = currentEnd; |
| 229 | } |
| 230 | |
| 231 | var nodes = currentNodes.slice(currentStart, currentEnd); |
| 232 | |
| 233 | for (var _i = futureStart; _i < futureEnd; _i++) { |
| 234 | var index = nodes.indexOf(futureNodes[_i]); |
| 235 | |
| 236 | if (-1 < index) { |
| 237 | var idxInOld = index + currentStart; |
| 238 | k = findK(tresh, minLen, idxInOld); |
| 239 | /* istanbul ignore else */ |
| 240 | |
| 241 | if (-1 < k) { |
| 242 | tresh[k] = idxInOld; |
| 243 | link[k] = { |
| 244 | newi: _i, |
| 245 | oldi: idxInOld, |
| 246 | prev: link[k - 1] |
| 247 | }; |
| 248 | } |
| 249 | } |
| 250 | } |
| 251 | |
| 252 | k = --minLen; |
| 253 | --currentEnd; |
| 254 | |
| 255 | while (tresh[k] > currentEnd) { |
| 256 | --k; |
| 257 | } |
| 258 | |
| 259 | minLen = currentChanges + futureChanges - k; |
| 260 | var diff = Array(minLen); |
| 261 | var ptr = link[k]; |
| 262 | --futureEnd; |
| 263 | |
| 264 | while (ptr) { |
| 265 | var _ptr = ptr, |
| 266 | newi = _ptr.newi, |
| 267 | oldi = _ptr.oldi; |
| 268 | |
| 269 | while (futureEnd > newi) { |
| 270 | diff[--minLen] = INSERTION; |
| 271 | --futureEnd; |
| 272 | } |
| 273 | |
| 274 | while (currentEnd > oldi) { |
| 275 | diff[--minLen] = DELETION; |