(t iterator)
| 435 | } |
| 436 | |
| 437 | func (d *descendantQuery) Select(t iterator) NodeNavigator { |
| 438 | for { |
| 439 | if d.iterator == nil { |
| 440 | d.posit = 0 |
| 441 | node := d.Input.Select(t) |
| 442 | if node == nil { |
| 443 | return nil |
| 444 | } |
| 445 | node = node.Copy() |
| 446 | d.level = 0 |
| 447 | first := true |
| 448 | d.iterator = func() NodeNavigator { |
| 449 | if first { |
| 450 | first = false |
| 451 | if d.Self && d.Predicate(node) { |
| 452 | return node |
| 453 | } |
| 454 | } |
| 455 | |
| 456 | for { |
| 457 | if node.MoveToChild() { |
| 458 | d.level = d.level + 1 |
| 459 | } else { |
| 460 | for { |
| 461 | if d.level == 0 { |
| 462 | return nil |
| 463 | } |
| 464 | if node.MoveToNext() { |
| 465 | break |
| 466 | } |
| 467 | node.MoveToParent() |
| 468 | d.level = d.level - 1 |
| 469 | } |
| 470 | } |
| 471 | if d.Predicate(node) { |
| 472 | return node |
| 473 | } |
| 474 | } |
| 475 | } |
| 476 | } |
| 477 | |
| 478 | if node := d.iterator(); node != nil { |
| 479 | d.posit++ |
| 480 | return node |
| 481 | } |
| 482 | d.iterator = nil |
| 483 | } |
| 484 | } |
| 485 | |
| 486 | func (d *descendantQuery) Evaluate(t iterator) interface{} { |
| 487 | d.Input.Evaluate(t) |
no test coverage detected