瀏覽代碼

Use specialized version of BytesSequence due to performance resons.

Marcin Krzyżanowski 9 年之前
父節點
當前提交
3351a605c5
共有 1 個文件被更改,包括 24 次插入4 次删除
  1. 24 4
      Sources/CryptoSwift/BytesSequence.swift

+ 24 - 4
Sources/CryptoSwift/BytesSequence.swift

@@ -6,11 +6,31 @@
 //  Copyright © 2015 Marcin Krzyzanowski. All rights reserved.
 //
 
-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
+/// Generic version of BytesSequence is slower, therefore specialized version is in use
+///
+//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<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 = offset.advanced(by: result.count)
+//            if !result.isEmpty {
+//                return result
+//            }
+//            return nil
+//        }
+//    }
+//}
+
+struct BytesSequence: Sequence {
+    let chunkSize: Array<UInt8>.IndexDistance
+    let data: Array<UInt8>
 
-    func makeIterator() -> AnyIterator<D.SubSequence> {
+    func makeIterator() -> AnyIterator<ArraySlice<UInt8>> {
         var offset = data.startIndex
         return AnyIterator {
             let end = Swift.min(self.chunkSize, self.data.count - offset)