@@ -21,19 +21,17 @@ public protocol CxxConvertibleToCollection {
21
21
mutating func __endUnsafe( ) -> RawIterator
22
22
}
23
23
24
- @inlinable @inline ( __always)
25
- internal func forEachElement< C: CxxConvertibleToCollection > (
26
- of c: C ,
27
- body: ( C . RawIterator . Pointee ) -> Void
28
- ) {
29
- var mutableC = c
30
- withExtendedLifetime ( mutableC) {
31
- var rawIterator = mutableC. __beginUnsafe ( )
32
- let endIterator = mutableC. __endUnsafe ( )
24
+ extension CxxConvertibleToCollection {
25
+ @inlinable
26
+ internal func forEach( _ body: ( RawIterator . Pointee ) -> Void ) {
27
+ var mutableSelf = self
28
+ var rawIterator = mutableSelf. __beginUnsafe ( )
29
+ let endIterator = mutableSelf. __endUnsafe ( )
33
30
while rawIterator != endIterator {
34
31
body ( rawIterator. pointee)
35
32
rawIterator = rawIterator. successor ( )
36
33
}
34
+ withExtendedLifetime ( mutableSelf) { }
37
35
}
38
36
}
39
37
@@ -51,7 +49,7 @@ extension RangeReplaceableCollection {
51
49
where C. RawIterator. Pointee == Element {
52
50
53
51
self . init ( )
54
- forEachElement ( of : c ) { self . append ( $0) }
52
+ c . forEach { self . append ( $0) }
55
53
}
56
54
}
57
55
@@ -68,6 +66,6 @@ extension Set {
68
66
where C. RawIterator. Pointee == Element {
69
67
70
68
self . init ( )
71
- forEachElement ( of : c ) { self . insert ( $0) }
69
+ c . forEach { self . insert ( $0) }
72
70
}
73
71
}
0 commit comments