Skip to content

Instantly share code, notes, and snippets.

@oisdk
Created July 15, 2015 10:51
Show Gist options
  • Save oisdk/48e04550b25282948e45 to your computer and use it in GitHub Desktop.
Save oisdk/48e04550b25282948e45 to your computer and use it in GitHub Desktop.
extension Sliceable {
public func uncons() -> (Generator.Element, SubSlice)? {
return first.map { ($0, dropFirst(self)) }
}
public func uncons() -> (
Generator.Element,
Generator.Element,
SubSlice)? {
var i = startIndex
let maybeNext: () -> Generator.Element? = { (i == self.endIndex ? nil : self[i++]) }
if let a = maybeNext(), b = maybeNext() {
return (a, b, self[i..<endIndex])
}
return nil
}
public func uncons() -> (
Generator.Element,
Generator.Element,
Generator.Element,
SubSlice)? {
var i = startIndex
let maybeNext: () -> Generator.Element? = { (i == self.endIndex ? nil : self[i++]) }
if let a = maybeNext(), b = maybeNext(), c = maybeNext() {
return (a, b, c, self[i..<endIndex])
}
return nil
}
public func uncons() -> (
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
SubSlice)? {
var i = startIndex
let maybeNext: () -> Generator.Element? = { (i == self.endIndex ? nil : self[i++]) }
if let a = maybeNext(), b = maybeNext(), c = maybeNext(), d = maybeNext() {
return (a, b, c, d, self[i..<endIndex])
}
return nil
}
public func uncons() -> (
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
SubSlice)? {
var i = startIndex
let maybeNext: () -> Generator.Element? = { (i == self.endIndex ? nil : self[i++]) }
if let
a = maybeNext(),
b = maybeNext(),
c = maybeNext(),
d = maybeNext(),
e = maybeNext() {
return (a, b, c, d, e, self[i..<endIndex])
}
return nil
}
public func uncons() -> (
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
SubSlice)? {
var i = startIndex
let maybeNext: () -> Generator.Element? = { (i == self.endIndex ? nil : self[i++]) }
if let
a = maybeNext(),
b = maybeNext(),
c = maybeNext(),
d = maybeNext(),
e = maybeNext(),
f = maybeNext() {
return (a, b, c, d, e, f, self[i..<endIndex])
}
return nil
}
public func uncons() -> (
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
SubSlice)? {
var i = startIndex
let maybeNext: () -> Generator.Element? = { (i == self.endIndex ? nil : self[i++]) }
if let
a = maybeNext(),
b = maybeNext(),
c = maybeNext(),
d = maybeNext(),
e = maybeNext(),
f = maybeNext(),
g = maybeNext() {
return (a, b, c, d, e, f, g, self[i..<endIndex])
}
return nil
}
public func uncons() -> (
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
SubSlice)? {
var i = startIndex
let maybeNext: () -> Generator.Element? = { (i == self.endIndex ? nil : self[i++]) }
if let
a = maybeNext(),
b = maybeNext(),
c = maybeNext(),
d = maybeNext(),
e = maybeNext(),
f = maybeNext(),
g = maybeNext(),
h = maybeNext() {
return (a, b, c, d, e, f, g, h, self[i..<endIndex])
}
return nil
}
public func uncons() -> (
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
Generator.Element,
SubSlice)? {
var i = startIndex
let maybeNext: () -> Generator.Element? = { (i == self.endIndex ? nil : self[i++]) }
if let
a = maybeNext(),
b = maybeNext(),
c = maybeNext(),
d = maybeNext(),
e = maybeNext(),
f = maybeNext(),
g = maybeNext(),
h = maybeNext(),
j = maybeNext() {
return (a, b, c, d, e, f, g, h, j, self[i..<endIndex])
}
return nil
}
}
let list = [Int](0..<8)
list.uncons().map { // (0, [1, 2, 3, 4, 5, 6, 7])
(a, b) in (a, b)
}
list.uncons().map { // (0, 1, [2, 3, 4, 5, 6, 7])
(a, b, c) in (a, b, c)
}
list.uncons().map { // (0, 1, 2, [3, 4, 5, 6, 7])
(a, b, c, d) in (a, b, c, d)
}
list.uncons().map { // (0, 1, 2, 3, [4, 5, 6, 7])
(a, b, c, d, e) in (a, b, c, d, e)
}
list.uncons().map { // (0, 1, 2, 3, 4, [5, 6, 7])
(a, b, c, d, e, f) in (a, b, c, d, e, f)
}
list.uncons().map { // (0, 1, 2, 3, 4, 5, [6, 7])
(a, b, c, d, e, f, g) in (a, b, c, d, e, f, g)
}
list.uncons().map { // (0, 1, 2, 3, 4, 5, 6, [7])
(a, b, c, d, e, f, g, h) in (a, b, c, d, e, f, g, h)
}
list.uncons().map { // (0, 1, 2, 3, 4, 5, 6, 7, [])
(a, b, c, d, e, f, g, h, i) in (a, b, c, d, e, f, g, h, i)
}
list.uncons().map { // nil
(a, b, c, d, e, f, g, h, i, j) in (a, b, c, d, e, f, g, h, i, j)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment