@@ -570,14 +570,10 @@ public enum XMLIndexer {
570
570
public func filter( _ included: ( _ elem: XMLElement , _ index: Int ) -> Bool ) -> XMLIndexer {
571
571
switch self {
572
572
case . list( let list) :
573
- let results = filterWithIndex ( seq: list, included: included)
574
- if results. count == 1 {
575
- return XMLIndexer . element ( results. first!)
576
- }
577
- return XMLIndexer . list ( results)
573
+ return handleFilteredResults ( list: list, included: included)
578
574
579
575
case . element( let elem) :
580
- return XMLIndexer . list ( filterWithIndex ( seq : elem. xmlChildren, included: included) )
576
+ return handleFilteredResults ( list : elem. xmlChildren, included: included)
581
577
582
578
case . stream( let ops) :
583
579
let found = ops. findElements ( )
@@ -588,20 +584,21 @@ public enum XMLIndexer {
588
584
} else {
589
585
list = found. all. map { $0. element! }
590
586
}
591
- let results = filterWithIndex ( seq: list, included: included)
592
- if results. count == 1 {
593
- return XMLIndexer . element ( results. first!)
594
- }
595
- return XMLIndexer . list ( results)
587
+
588
+ return handleFilteredResults ( list: list, included: included)
596
589
597
590
default :
598
- return XMLIndexer . list ( [ ] )
591
+ return . list( [ ] )
599
592
}
600
593
}
601
594
602
- private func filterWithIndex( seq: [ XMLElement ] ,
603
- included: ( _ elem: XMLElement , _ index: Int ) -> Bool ) -> [ XMLElement ] {
604
- return zip ( seq. indices, seq) . filter { included ( $1, $0) } . map { $1 }
595
+ private func handleFilteredResults( list: [ XMLElement ] ,
596
+ included: ( _ elem: XMLElement , _ index: Int ) -> Bool ) -> XMLIndexer {
597
+ let results = zip ( list. indices, list) . filter { included ( $1, $0) } . map { $1 }
598
+ if results. count == 1 {
599
+ return . element( results. first!)
600
+ }
601
+ return . list( results)
605
602
}
606
603
607
604
/// All child elements from the currently indexed level
0 commit comments