Skip to content

Instantly share code, notes, and snippets.

@rnapier
Created November 30, 2014 19:59
Show Gist options
  • Save rnapier/6b057ff83cd1cd1f6e70 to your computer and use it in GitHub Desktop.
Save rnapier/6b057ff83cd1cd1f6e70 to your computer and use it in GitHub Desktop.
ZipExtended2
struct ZipExtendGenerator2<E0 : GeneratorType, E1 : GeneratorType> : GeneratorType {
typealias Element = (E0.Element?, E1.Element?)
var e0: E0
var e1: E1
init(_ e0: E0, _ e1: E1) {
self.e0 = e0
self.e1 = e1
}
mutating func next() -> Element? {
let first = e0.next()
let second = e1.next()
if first == nil && second == nil {
return nil
}
return (first, second)
}
}
struct ZipExtend2<S0 : SequenceType, S1 : SequenceType> : SequenceType {
typealias Stream1 = S0.Generator
typealias Stream2 = S1.Generator
typealias Generator = ZipExtendGenerator2<S0.Generator, S1.Generator>
let s0: S0
let s1: S1
init(_ s0: S0, _ s1: S1) {
self.s0 = s0
self.s1 = s1
}
func generate() -> Generator {
return ZipExtendGenerator2(self.s0.generate(), self.s1.generate())
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment