Skip to content

Commit 0464c3d

Browse files
author
Dave Abrahams
committed
[stdlib] [Generator|Sequence]Of => Any[Generator|Sequence]
Retire the old components now that the new ones have passed API review. <rdar://20406937> covers the migration fallout of this change. Swift SVN r27092
1 parent 858b122 commit 0464c3d

10 files changed

+79
-95
lines changed

stdlib/public/core/Character.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ public struct Character :
136136
}
137137

138138
internal static func _makeSmallUTF8Generator(var u8: UInt64)
139-
-> GeneratorOf<UTF8.CodeUnit> {
140-
return GeneratorOf<UTF8.CodeUnit> {
139+
-> AnyGenerator<UTF8.CodeUnit> {
140+
return anyGenerator {
141141
let result = UInt8(truncatingBitPattern: u8)
142142
if result == 0xFF {
143143
return nil

stdlib/public/core/Existential.swift

+10-64
Original file line numberDiff line numberDiff line change
@@ -18,75 +18,21 @@
1818
// Policy.swift. Similar components should usually be defined next to
1919
// their respective protocols.
2020

21-
/// A type-erased generator.
22-
///
23-
/// The generator for `SequenceOf<T>`. Forwards operations to an
24-
/// arbitrary underlying generator with the same `Element` type,
25-
/// hiding the specifics of the underlying generator type.
26-
///
27-
/// See also: `SequenceOf<T>`.
28-
public struct GeneratorOf<T> : GeneratorType, SequenceType {
29-
30-
/// Construct an instance whose `next()` method calls `nextElement`.
21+
@availability(*, unavailable, renamed="AnyGenerator")
22+
public struct GeneratorOf<T> {
23+
@availability(*, unavailable, renamed="anyGenerator")
3124
public init(_ nextElement: ()->T?) {
32-
self._next = nextElement
25+
fatalError("unavailable")
3326
}
3427

35-
/// Construct an instance whose `next()` method pulls its results
36-
/// from `base`.
28+
@availability(*, unavailable, renamed="anyGenerator")
3729
public init<G: GeneratorType where G.Element == T>(var _ base: G) {
38-
self._next = { base.next() }
39-
}
40-
41-
/// Advance to the next element and return it, or `nil` if no next
42-
/// element exists.
43-
///
44-
/// Requires: `next()` has not been applied to a copy of `self`
45-
/// since the copy was made, and no preceding call to `self.next()`
46-
/// has returned `nil`.
47-
public mutating func next() -> T? {
48-
return _next()
49-
}
50-
51-
/// `GeneratorOf<T>` is also a `SequenceType`, so it `generate`\ s
52-
/// a copy of itself
53-
public func generate() -> GeneratorOf {
54-
return self
30+
fatalError("unavailable")
5531
}
56-
let _next: ()->T?
5732
}
5833

59-
/// A type-erased sequence.
60-
///
61-
/// Forwards operations to an arbitrary underlying sequence with the
62-
/// same `Element` type, hiding the specifics of the underlying
63-
/// sequence type.
64-
///
65-
/// See also: `GeneratorOf<T>`.
66-
public struct SequenceOf<T> : SequenceType {
67-
/// Construct an instance whose `generate()` method forwards to
68-
/// `makeUnderlyingGenerator`
69-
public init<G: GeneratorType where G.Element == T>(
70-
_ makeUnderlyingGenerator: ()->G
71-
) {
72-
_generate = { GeneratorOf(makeUnderlyingGenerator()) }
73-
}
74-
75-
/// Construct an instance whose `generate()` method forwards to
76-
/// that of `base`.
77-
public init<S: SequenceType where S.Generator.Element == T>(_ base: S) {
78-
self = SequenceOf({ base.generate() })
79-
}
80-
81-
/// Return a *generator* over the elements of this *sequence*.
82-
///
83-
/// Complexity: O(1)
84-
public func generate() -> GeneratorOf<T> {
85-
return _generate()
86-
}
87-
88-
let _generate: ()->GeneratorOf<T>
89-
}
34+
@availability(*, unavailable, renamed="AnySequence")
35+
public struct SequenceOf<T> {}
9036

9137
internal struct _CollectionOf<
9238
IndexType_ : ForwardIndexType, T
@@ -101,9 +47,9 @@ internal struct _CollectionOf<
10147
/// Return a *generator* over the elements of this *sequence*.
10248
///
10349
/// Complexity: O(1)
104-
func generate() -> GeneratorOf<T> {
50+
func generate() -> AnyGenerator<T> {
10551
var index = startIndex
106-
return GeneratorOf {
52+
return anyGenerator {
10753
() -> T? in
10854
if _fastPath(index != self.endIndex) {
10955
++index

test/1_stdlib/Collection.swift

+6-1
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,11 @@ func testCount() {
167167
}
168168
testCount()
169169

170+
struct SequenceOnly<T: SequenceType> : SequenceType {
171+
var base: T
172+
func generate() -> T.Generator { return base.generate() }
173+
}
174+
170175
func testUnderestimateCount() {
171176
// CHECK: testing underestimateCount
172177
println("testing underestimateCount")
@@ -175,7 +180,7 @@ func testUnderestimateCount() {
175180
// CHECK-NEXT: bidirectional: 5
176181
println("bidirectional: \(underestimateCount(dict))")
177182
// CHECK-NEXT: SequenceType only: 0
178-
let s = SequenceOf(array)
183+
let s = SequenceOnly(base: array)
179184
println("SequenceType only: \(underestimateCount(s))")
180185
}
181186
testUnderestimateCount()

test/1_stdlib/Existential.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// RUN: %target-run-simple-swift | FileCheck %s
22

3-
func pipe<T>(input: SequenceOf<T>, output: SinkOf<T>) {
3+
func pipe<T>(input: AnySequence<T>, output: SinkOf<T>) {
44
for x in input {
55
output.put(x)
66
}
@@ -16,7 +16,7 @@ struct Print<T : CustomStringConvertible> : SinkType {
1616
var z = [ 1, 2, 3 ]
1717

1818
func printArray<T : CustomStringConvertible>(x: [T]) {
19-
pipe(SequenceOf(x), SinkOf(Print<T>()))
19+
pipe(AnySequence(x), SinkOf(Print<T>()))
2020
println()
2121
}
2222

test/1_stdlib/Join.swift.gyb

+8-8
Original file line numberDiff line numberDiff line change
@@ -317,50 +317,50 @@ JoinTestSuite.test("OperatorPlus") {
317317
// ExtensibleCollectionType + SequenceType
318318
if true {
319319
var ec: [Int] = []
320-
var s = SequenceOf([Int]())
320+
var s = AnySequence([Int]())
321321
var r: [Int] = ec + s
322322
expectEqual([], r)
323323
}
324324
if true {
325325
var ec: [Int] = []
326-
var s = SequenceOf([ 4, 5, 6, 7 ])
326+
var s = AnySequence([ 4, 5, 6, 7 ])
327327
var r: [Int] = ec + s
328328
expectEqual([ 4, 5, 6, 7 ], r)
329329
}
330330
if true {
331331
var ec: [Int] = [ 1, 2, 3 ]
332-
var s = SequenceOf([Int]())
332+
var s = AnySequence([Int]())
333333
var r: [Int] = ec + s
334334
expectEqual([ 1, 2, 3 ], r)
335335
}
336336
if true {
337337
var ec: [Int] = [ 1, 2, 3 ]
338-
var s = SequenceOf([ 4, 5, 6, 7 ])
338+
var s = AnySequence([ 4, 5, 6, 7 ])
339339
var r: [Int] = ec + s
340340
expectEqual([ 1, 2, 3, 4, 5, 6, 7 ], r)
341341
}
342342

343343
// SequenceType + ExtensibleCollectionType
344344
if true {
345-
var s = SequenceOf([Int]())
345+
var s = AnySequence([Int]())
346346
var ec: [Int] = []
347347
var r: [Int] = s + ec
348348
expectEqual([], r)
349349
}
350350
if true {
351-
var s = SequenceOf([Int]())
351+
var s = AnySequence([Int]())
352352
var ec: [Int] = [ 4, 5, 6, 7 ]
353353
var r: [Int] = s + ec
354354
expectEqual([ 4, 5, 6, 7 ], r)
355355
}
356356
if true {
357-
var s = SequenceOf([ 1, 2, 3 ])
357+
var s = AnySequence([ 1, 2, 3 ])
358358
var ec: [Int] = []
359359
var r: [Int] = s + ec
360360
expectEqual([ 1, 2, 3 ], r)
361361
}
362362
if true {
363-
var s = SequenceOf([ 1, 2, 3 ])
363+
var s = AnySequence([ 1, 2, 3 ])
364364
var ec: [Int] = [ 4, 5, 6, 7]
365365
var r: [Int] = s + ec
366366
expectEqual([ 1, 2, 3, 4, 5, 6, 7 ], r)

test/1_stdlib/NewArray.swift.gyb

+1-1
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ testIsEmptyFirstLast${A}()
483483
//===--- Regression Tests -------------------------------------------------===//
484484
func rdar16958865() {
485485
var a: [Int] = []
486-
a += SequenceOf([ 42, 4242 ])
486+
a += AnySequence([ 42, 4242 ])
487487
// CHECK-NEXT: [42, 4242]
488488
println(a)
489489
}

test/Generics/same_type_constraints.swift

+33
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,39 @@ struct SatisfySameTypeAssocTypeRequirementDependent<T>
4343
func foo<F3: Fooable where F3.Foo == T>(f: F3) {}
4444
}
4545

46+
// Pulled in from old standard library to keep the following test
47+
// (LazySequenceOf) valid.
48+
public struct GeneratorOf<T> : GeneratorType, SequenceType {
49+
50+
/// Construct an instance whose `next()` method calls `nextElement`.
51+
public init(_ nextElement: ()->T?) {
52+
self._next = nextElement
53+
}
54+
55+
/// Construct an instance whose `next()` method pulls its results
56+
/// from `base`.
57+
public init<G: GeneratorType where G.Element == T>(var _ base: G) {
58+
self._next = { base.next() }
59+
}
60+
61+
/// Advance to the next element and return it, or `nil` if no next
62+
/// element exists.
63+
///
64+
/// Requires: `next()` has not been applied to a copy of `self`
65+
/// since the copy was made, and no preceding call to `self.next()`
66+
/// has returned `nil`.
67+
public mutating func next() -> T? {
68+
return _next()
69+
}
70+
71+
/// `GeneratorOf<T>` is also a `SequenceType`, so it `generate`\ s
72+
/// a copy of itself
73+
public func generate() -> GeneratorOf {
74+
return self
75+
}
76+
let _next: ()->T?
77+
}
78+
4679
// rdar://problem/19009056
4780
public struct LazySequenceOf<S : SequenceType, A where S.Generator.Element == A> : SequenceType {
4881
public func generate() -> GeneratorOf<A> {

test/SILGen/witness_same_type.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ struct Foo: Fooable {
2020
// rdar://problem/19049566
2121
// CHECK-LABEL: sil [transparent] [thunk] @_TTWUSs12SequenceType__USs13GeneratorType__GV17witness_same_type14LazySequenceOfQ_Q0__Ss14_Sequence_TypeS1_FS3_8generateUS3__US0____fQPS3_FT_QS4_9Generator
2222
public struct LazySequenceOf<SS : SequenceType, A where SS.Generator.Element == A> : SequenceType {
23-
public func generate() -> GeneratorOf<A> {
24-
var opt: GeneratorOf<A>?
23+
public func generate() -> AnyGenerator<A> {
24+
var opt: AnyGenerator<A>?
2525
return opt!
2626
}
2727
public subscript(i : Int) -> A {

validation-test/stdlib/Concatenate.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ for (expected, source) in samples {
4646
ConcatenateTests.test("sequence-\(source)") {
4747
checkSequence(
4848
ContiguousArray(expected),
49-
_lazyConcatenate(SequenceOf(source)),
49+
_lazyConcatenate(AnySequence(source)),
5050
SourceLocStack().withCurrentLoc())
5151
}
5252
}

validation-test/stdlib/Set.swift

+14-14
Original file line numberDiff line numberDiff line change
@@ -2479,23 +2479,23 @@ SetTestSuite.test("⊈.Set.Set") {
24792479

24802480
SetTestSuite.test("isSubsetOf.Set.Sequence") {
24812481
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2482-
let s2 = SequenceOf([1010, 2020, 3030])
2482+
let s2 = AnySequence([1010, 2020, 3030])
24832483
expectTrue(Set<Int>().isSubsetOf(s1))
24842484
expectFalse(s1.isSubsetOf(Set<Int>()))
24852485
expectTrue(s1.isSubsetOf(s1))
24862486
}
24872487

24882488
SetTestSuite.test("⊆.Set.Sequence") {
24892489
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2490-
let s2 = SequenceOf([1010, 2020, 3030])
2490+
let s2 = AnySequence([1010, 2020, 3030])
24912491
expectTrue(Set<Int>().isSubsetOf(s1))
24922492
expectFalse(s1 Set<Int>())
24932493
expectTrue(s1 s1)
24942494
}
24952495

24962496
SetTestSuite.test("⊈.Set.Sequence") {
24972497
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2498-
let s2 = SequenceOf([1010, 2020, 3030])
2498+
let s2 = AnySequence([1010, 2020, 3030])
24992499
expectFalse(Set<Int>() s1)
25002500
expectTrue(s1 Set<Int>())
25012501
expectFalse(s1 s1)
@@ -2527,23 +2527,23 @@ SetTestSuite.test("⊄.Set.Set") {
25272527

25282528
SetTestSuite.test("isStrictSubsetOf.Set.Sequence") {
25292529
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2530-
let s2 = SequenceOf([1010, 2020, 3030])
2530+
let s2 = AnySequence([1010, 2020, 3030])
25312531
expectTrue(Set<Int>().isStrictSubsetOf(s1))
25322532
expectFalse(s1.isStrictSubsetOf(Set<Int>()))
25332533
expectFalse(s1.isStrictSubsetOf(s1))
25342534
}
25352535

25362536
SetTestSuite.test("⊂.Set.Sequence") {
25372537
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2538-
let s2 = SequenceOf([1010, 2020, 3030])
2538+
let s2 = AnySequence([1010, 2020, 3030])
25392539
expectTrue(Set<Int>() s1)
25402540
expectFalse(s1 Set<Int>())
25412541
expectFalse(s1 s1)
25422542
}
25432543

25442544
SetTestSuite.test("⊄.Set.Sequence") {
25452545
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2546-
let s2 = SequenceOf([1010, 2020, 3030])
2546+
let s2 = AnySequence([1010, 2020, 3030])
25472547
expectFalse(Set<Int>() s1)
25482548
expectTrue(s1 Set<Int>())
25492549
expectTrue(s1 s1)
@@ -2581,7 +2581,7 @@ SetTestSuite.test("⊉.Set.Set") {
25812581

25822582
SetTestSuite.test("isSupersetOf.Set.Sequence") {
25832583
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2584-
let s2 = SequenceOf([1010, 2020, 3030])
2584+
let s2 = AnySequence([1010, 2020, 3030])
25852585
expectTrue(s1.isSupersetOf(Set<Int>()))
25862586
expectFalse(Set<Int>().isSupersetOf(s1))
25872587
expectTrue(s1.isSupersetOf(s1))
@@ -2591,7 +2591,7 @@ SetTestSuite.test("isSupersetOf.Set.Sequence") {
25912591

25922592
SetTestSuite.test("⊇.Set.Sequence") {
25932593
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2594-
let s2 = SequenceOf([1010, 2020, 3030])
2594+
let s2 = AnySequence([1010, 2020, 3030])
25952595
expectTrue(s1 Set<Int>())
25962596
expectFalse(Set<Int>() s1)
25972597
expectTrue(s1 s1)
@@ -2601,7 +2601,7 @@ SetTestSuite.test("⊇.Set.Sequence") {
26012601

26022602
SetTestSuite.test("⊉.Set.Sequence") {
26032603
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2604-
let s2 = SequenceOf([1010, 2020, 3030])
2604+
let s2 = AnySequence([1010, 2020, 3030])
26052605
expectFalse(s1 Set<Int>())
26062606
expectTrue(Set<Int>() s1)
26072607
expectFalse(s1 s1)
@@ -2638,7 +2638,7 @@ SetTestSuite.test("⊅.Set.Set") {
26382638

26392639
SetTestSuite.test("strictSuperset.Set.Sequence") {
26402640
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2641-
let s2 = SequenceOf([1010, 2020, 3030])
2641+
let s2 = AnySequence([1010, 2020, 3030])
26422642
expectTrue(s1.isStrictSupersetOf(Set<Int>()))
26432643
expectFalse(Set<Int>().isStrictSupersetOf(s1))
26442644
expectFalse(s1.isStrictSupersetOf(s1))
@@ -2647,7 +2647,7 @@ SetTestSuite.test("strictSuperset.Set.Sequence") {
26472647

26482648
SetTestSuite.test("⊃.Set.Sequence") {
26492649
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2650-
let s2 = SequenceOf([1010, 2020, 3030])
2650+
let s2 = AnySequence([1010, 2020, 3030])
26512651
expectTrue(s1 Set<Int>())
26522652
expectFalse(Set<Int>() s1)
26532653
expectFalse(s1 s1)
@@ -2656,7 +2656,7 @@ SetTestSuite.test("⊃.Set.Sequence") {
26562656

26572657
SetTestSuite.test("⊅.Set.Sequence") {
26582658
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2659-
let s2 = SequenceOf([1010, 2020, 3030])
2659+
let s2 = AnySequence([1010, 2020, 3030])
26602660
expectFalse(s1 Set<Int>())
26612661
expectTrue(Set<Int>() s1)
26622662
expectTrue(s1 s1)
@@ -2717,8 +2717,8 @@ SetTestSuite.test("isDisjointWith.Set.Set") {
27172717

27182718
SetTestSuite.test("isDisjointWith.Set.Sequence") {
27192719
let s1 = Set([1010, 2020, 3030, 4040, 5050, 6060])
2720-
let s2 = SequenceOf([1010, 2020, 3030])
2721-
let s3 = SequenceOf([7070, 8080, 9090])
2720+
let s2 = AnySequence([1010, 2020, 3030])
2721+
let s3 = AnySequence([7070, 8080, 9090])
27222722
expectTrue(s1.isDisjointWith(s3))
27232723
expectFalse(s1.isDisjointWith(s2))
27242724
expectTrue(Set<Int>().isDisjointWith(s1))

0 commit comments

Comments
 (0)