Browse Source

BytesSequence is more general, accepts Array and ArraySlice

Marcin Krzyżanowski 9 years ago
parent
commit
106f949f1f
1 changed files with 11 additions and 8 deletions
  1. 11 8
      Sources/CryptoSwift/BytesSequence.swift

+ 11 - 8
Sources/CryptoSwift/BytesSequence.swift

@@ -6,17 +6,20 @@
 //  Copyright © 2015 Marcin Krzyzanowski. All rights reserved.
 //
 
-struct BytesSequence: Sequence {
-    let chunkSize: Int
-    let data: Array<UInt8>
+struct BytesSequence<D: RandomAccessCollection>: Sequence where D.Iterator.Element == UInt8, D.IndexDistance == Int, D.SubSequence.IndexDistance == Int, D.Index == Int {
+    let chunkSize: D.IndexDistance
+    let data: D
 
-    func makeIterator() -> AnyIterator<ArraySlice<UInt8>> {
-        var offset:Int = 0
+    func makeIterator() -> AnyIterator<D.SubSequence> {
+        var offset = data.startIndex
         return AnyIterator {
             let end = Swift.min(self.chunkSize, self.data.count - offset)
             let result = self.data[offset..<offset + end]
-            offset += result.count
-            return !result.isEmpty ? result : nil
+            offset = offset.advanced(by: result.count)
+            if !result.isEmpty {
+                return result
+            }
+            return nil
         }
     }
-}
+}