Skip to content

Instantly share code, notes, and snippets.

@takasek
Created April 3, 2016 09:39
Show Gist options
  • Save takasek/0da604157ae1a2f464928531230b1b63 to your computer and use it in GitHub Desktop.
Save takasek/0da604157ae1a2f464928531230b1b63 to your computer and use it in GitHub Desktop.
func uekizanGenerator<S: SequenceType>(sources: S, insert margin: S.Generator.Element) -> AnyGenerator<S.Generator.Element> {
var gen = sources.generate()
var isMargin = false
var preserved: S.Generator.Element? = gen.next()
func getMargin() -> S.Generator.Element? {
guard preserved != nil else { return nil }
return margin
}
func getElement() -> S.Generator.Element? {
defer { preserved = gen.next() }
return preserved
}
return anyGenerator {
defer { isMargin = !isMargin }
return isMargin ? getMargin() : getElement()
}
}
for i in uekizanGenerator([10, 20, 30], insert: 7) {
print(i)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment