BytesSequence.swift 811 B

12345678910111213141516171819202122232425
  1. //
  2. // BytesSequence.swift
  3. // CryptoSwift
  4. //
  5. // Created by Marcin Krzyzanowski on 26/09/15.
  6. // Copyright © 2015 Marcin Krzyzanowski. All rights reserved.
  7. //
  8. struct BytesSequence<D: RandomAccessCollection>: Sequence where D.Iterator.Element == UInt8, D.IndexDistance == Int, D.SubSequence.IndexDistance == Int, D.Index == Int {
  9. let chunkSize: D.IndexDistance
  10. let data: D
  11. func makeIterator() -> AnyIterator<D.SubSequence> {
  12. var offset = data.startIndex
  13. return AnyIterator {
  14. let end = Swift.min(self.chunkSize, self.data.count - offset)
  15. let result = self.data[offset..<offset + end]
  16. offset = offset.advanced(by: result.count)
  17. if !result.isEmpty {
  18. return result
  19. }
  20. return nil
  21. }
  22. }
  23. }