connect appends any necessary Identity, Modified, UniqueX, or UniqueY types to the edit-script to connect p.point to dst.
(dst point, f EqualFunc)
| 331 | // connect appends any necessary Identity, Modified, UniqueX, or UniqueY types |
| 332 | // to the edit-script to connect p.point to dst. |
| 333 | func (p *path) connect(dst point, f EqualFunc) { |
| 334 | if p.dir > 0 { |
| 335 | // Connect in forward direction. |
| 336 | for dst.X > p.X && dst.Y > p.Y { |
| 337 | switch r := f(p.X, p.Y); { |
| 338 | case r.Equal(): |
| 339 | p.append(Identity) |
| 340 | case r.Similar(): |
| 341 | p.append(Modified) |
| 342 | case dst.X-p.X >= dst.Y-p.Y: |
| 343 | p.append(UniqueX) |
| 344 | default: |
| 345 | p.append(UniqueY) |
| 346 | } |
| 347 | } |
| 348 | for dst.X > p.X { |
| 349 | p.append(UniqueX) |
| 350 | } |
| 351 | for dst.Y > p.Y { |
| 352 | p.append(UniqueY) |
| 353 | } |
| 354 | } else { |
| 355 | // Connect in reverse direction. |
| 356 | for p.X > dst.X && p.Y > dst.Y { |
| 357 | switch r := f(p.X-1, p.Y-1); { |
| 358 | case r.Equal(): |
| 359 | p.append(Identity) |
| 360 | case r.Similar(): |
| 361 | p.append(Modified) |
| 362 | case p.Y-dst.Y >= p.X-dst.X: |
| 363 | p.append(UniqueY) |
| 364 | default: |
| 365 | p.append(UniqueX) |
| 366 | } |
| 367 | } |
| 368 | for p.X > dst.X { |
| 369 | p.append(UniqueX) |
| 370 | } |
| 371 | for p.Y > dst.Y { |
| 372 | p.append(UniqueY) |
| 373 | } |
| 374 | } |
| 375 | } |
| 376 | |
| 377 | func (p *path) append(t EditType) { |
| 378 | p.es = append(p.es, t) |
no test coverage detected