Advertisement
Guest User

Untitled

a guest
Jul 7th, 2015
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1.  
  2. extension SequenceType {
  3. func prefixWhile(condition: Generator.Element -> Bool) -> [Generator.Element] {
  4.  
  5. var g = self.generate()
  6.  
  7. return Array( anyGenerator {
  8. if let n = g.next() where condition(n) {
  9. return n
  10. } else {
  11. return nil
  12. }
  13. } )
  14. }
  15.  
  16. func drop(n: Int) -> [Generator.Element]{
  17. var g = self.generate()
  18. for _ in 0..<n { g.next() }
  19. return Array(AnySequence{g})
  20. }
  21.  
  22. func jump(n: Int) -> [Generator.Element] {
  23. var g = self.generate()
  24. return Array( anyGenerator {
  25. for _ in 0..<n {g.next()}
  26. return g.next()
  27. } )
  28. }
  29.  
  30. func hop(n: Int) -> [Generator.Element] {
  31. var g = self.generate()
  32. return Array( anyGenerator {
  33. defer { for _ in 0..<n {g.next()} }
  34. return g.next()
  35. } )
  36. }
  37.  
  38. func frame (n: Int) -> AnyGenerator<ArraySlice<Generator.Element>> {
  39. var (g, count) = (self.generate(), 0)
  40. var window: ArraySlice<Generator.Element>? = ArraySlice(anyGenerator{++count > n ? nil : g.next()})
  41. return anyGenerator {
  42. defer { window = g.next().map{ dropFirst(window!) + [$0] } }
  43. return window
  44. }
  45. }
  46. }
  47.  
  48. func zipWithPadding <
  49. S0: SequenceType, S1: SequenceType, E0, E1 where
  50. S0.Generator.Element == E0, S1.Generator.Element == E1
  51. > (s0: S0, s1: S1) -> AnyGenerator<(E0?, E1?)> {
  52. var (g0, g1) :
  53. (S0.Generator?, S1.Generator?) =
  54. (s0.generate(), s1.generate())
  55. return anyGenerator {
  56.  
  57. let e0: E0? = g0?.next()
  58. let e1: E1? = g1?.next()
  59.  
  60. if e0 == nil { g0 = nil }
  61. if e1 == nil { g1 = nil }
  62.  
  63. return (e0 != nil || e1 != nil) ? (e0, e1) : nil
  64. }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement