MCPcopy Create free account
hub / github.com/antchfx/xpath / Select

Method Select

query.go:616–669  ·  view source on GitHub ↗
(t iterator)

Source from the content-addressed store, hash-verified

614}
615
616func (p *precedingQuery) Select(t iterator) NodeNavigator {
617 for {
618 if p.iterator == nil {
619 p.posit = 0
620 node := p.Input.Select(t)
621 if node == nil {
622 return nil
623 }
624 node = node.Copy()
625 if p.Sibling {
626 p.iterator = func() NodeNavigator {
627 for {
628 for !node.MoveToPrevious() {
629 return nil
630 }
631 if p.Predicate(node) {
632 p.posit++
633 return node
634 }
635 }
636 }
637 } else {
638 var q query
639 p.iterator = func() NodeNavigator {
640 for {
641 if q == nil {
642 for !node.MoveToPrevious() {
643 if !node.MoveToParent() {
644 return nil
645 }
646 p.posit = 0
647 }
648 q = &descendantQuery{
649 Self: true,
650 Input: &contextQuery{},
651 Predicate: p.Predicate,
652 }
653 t.Current().MoveTo(node)
654 }
655 if node := q.Select(t); node != nil {
656 p.posit++
657 return node
658 }
659 q = nil
660 }
661 }
662 }
663 }
664 if node := p.iterator(); node != nil {
665 return node
666 }
667 p.iterator = nil
668 }
669}
670
671func (p *precedingQuery) Evaluate(t iterator) interface{} {
672 p.Input.Evaluate(t)

Callers

nothing calls this directly

Calls 6

SelectMethod · 0.95
CopyMethod · 0.65
MoveToPreviousMethod · 0.65
MoveToParentMethod · 0.65
MoveToMethod · 0.65
CurrentMethod · 0.65

Tested by

no test coverage detected