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

Method Select

query.go:1044–1106  ·  view source on GitHub ↗
(t iterator)

Source from the content-addressed store, hash-verified

1042}
1043
1044func (b *booleanQuery) Select(t iterator) NodeNavigator {
1045 if b.iterator == nil {
1046 var list []NodeNavigator
1047 i := 0
1048 root := t.Current().Copy()
1049 if b.IsOr {
1050 for {
1051 node := b.Left.Select(t)
1052 if node == nil {
1053 break
1054 }
1055 node = node.Copy()
1056 list = append(list, node)
1057 }
1058 t.Current().MoveTo(root)
1059 for {
1060 node := b.Right.Select(t)
1061 if node == nil {
1062 break
1063 }
1064 node = node.Copy()
1065 list = append(list, node)
1066 }
1067 } else {
1068 var m []NodeNavigator
1069 var n []NodeNavigator
1070 for {
1071 node := b.Left.Select(t)
1072 if node == nil {
1073 break
1074 }
1075 node = node.Copy()
1076 list = append(m, node)
1077 }
1078 t.Current().MoveTo(root)
1079 for {
1080 node := b.Right.Select(t)
1081 if node == nil {
1082 break
1083 }
1084 node = node.Copy()
1085 list = append(n, node)
1086 }
1087 for _, k := range m {
1088 for _, j := range n {
1089 if k == j {
1090 list = append(list, k)
1091 }
1092 }
1093 }
1094 }
1095
1096 b.iterator = func() NodeNavigator {
1097 if i >= len(list) {
1098 return nil
1099 }
1100 node := list[i]
1101 i++

Callers

nothing calls this directly

Calls 4

CopyMethod · 0.65
CurrentMethod · 0.65
SelectMethod · 0.65
MoveToMethod · 0.65

Tested by

no test coverage detected