@@ -893,10 +893,9 @@ extension Sequence {
893
893
894
894
// FIXME: <rdar://problem/21885650> Create reusable RingBuffer<T>
895
895
// Put incoming elements into a ring buffer to save space. Once all
896
- // elements are consumed, reorder the ring buffer into an `Array`
897
- // and return it. This saves memory for sequences particularly longer
898
- // than `maxLength`.
899
- var ringBuffer : [ Element ] = [ ]
896
+ // elements are consumed, reorder the ring buffer into a copy and return it.
897
+ // This saves memory for sequences particularly longer than `maxLength`.
898
+ var ringBuffer = ContiguousArray < Element > ( )
900
899
ringBuffer. reserveCapacity ( Swift . min ( maxLength, underestimatedCount) )
901
900
902
901
var i = 0
@@ -906,19 +905,18 @@ extension Sequence {
906
905
ringBuffer. append ( element)
907
906
} else {
908
907
ringBuffer [ i] = element
909
- i += 1
910
- i %= maxLength
908
+ i = ( i + 1 ) % maxLength
911
909
}
912
910
}
913
911
914
912
if i != ringBuffer. startIndex {
915
- var rotated : [ Element ] = [ ]
913
+ var rotated = ContiguousArray < Element > ( )
916
914
rotated. reserveCapacity ( ringBuffer. count)
917
915
rotated += ringBuffer [ i..< ringBuffer. endIndex]
918
916
rotated += ringBuffer [ 0 ..< i]
919
- return rotated
920
- } else {
921
- return ringBuffer
917
+ return Array ( rotated)
918
+ } else {
919
+ return Array ( ringBuffer)
922
920
}
923
921
}
924
922
@@ -976,8 +974,8 @@ extension Sequence {
976
974
// holding tank into the result, an `Array`. This saves
977
975
// `k` * sizeof(Element) of memory, because slices keep the entire
978
976
// memory of an `Array` alive.
979
- var result : [ Element ] = [ ]
980
- var ringBuffer : [ Element ] = [ ]
977
+ var result = ContiguousArray < Element > ( )
978
+ var ringBuffer = ContiguousArray < Element > ( )
981
979
var i = ringBuffer. startIndex
982
980
983
981
for element in self {
@@ -986,11 +984,10 @@ extension Sequence {
986
984
} else {
987
985
result. append ( ringBuffer [ i] )
988
986
ringBuffer [ i] = element
989
- i += 1
990
- i %= k
987
+ i = ( i + 1 ) % k
991
988
}
992
989
}
993
- return result
990
+ return Array ( result)
994
991
}
995
992
996
993
/// Returns a sequence by skipping the initial, consecutive elements that
@@ -1072,15 +1069,15 @@ extension Sequence {
1072
1069
public __consuming func prefix(
1073
1070
while predicate: ( Element ) throws -> Bool
1074
1071
) rethrows -> [ Element ] {
1075
- var result : [ Element ] = [ ]
1072
+ var result = ContiguousArray < Element > ( )
1076
1073
1077
1074
for element in self {
1078
1075
guard try predicate ( element) else {
1079
1076
break
1080
1077
}
1081
1078
result. append ( element)
1082
1079
}
1083
- return result
1080
+ return Array ( result)
1084
1081
}
1085
1082
}
1086
1083
0 commit comments