IndexedCollection.swift 808 B

1234567891011121314151617181920212223242526272829303132333435
  1. import Foundation
  2. struct IndexedCollection<Base: RandomAccessCollection>: RandomAccessCollection {
  3. typealias Index = Base.Index
  4. typealias Element = (index: Index, element: Base.Element)
  5. let base: Base
  6. var startIndex: Index { base.startIndex }
  7. var endIndex: Index { base.endIndex }
  8. func index(after i: Index) -> Index {
  9. base.index(after: i)
  10. }
  11. func index(before i: Index) -> Index {
  12. base.index(before: i)
  13. }
  14. func index(_ i: Index, offsetBy distance: Int) -> Index {
  15. base.index(i, offsetBy: distance)
  16. }
  17. subscript(position: Index) -> Element {
  18. (index: position, element: base[position])
  19. }
  20. }
  21. extension RandomAccessCollection {
  22. func indexed() -> IndexedCollection<Self> {
  23. IndexedCollection(base: self)
  24. }
  25. }