//===----------------------------------------------------------------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2018 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// import Dispatch extension DispatchData : DataProtocol { public struct Region : DataProtocol, ContiguousBytes { internal let bytes: UnsafeBufferPointer internal let index: DispatchData.Index internal let owner: DispatchData internal init(bytes: UnsafeBufferPointer, index: DispatchData.Index, owner: DispatchData) { self.bytes = bytes self.index = index self.owner = owner } public var regions: CollectionOfOne { return CollectionOfOne(self) } public subscript(position: DispatchData.Index) -> UInt8 { precondition(index <= position && position <= index + bytes.count) return bytes[position - index] } public var startIndex: DispatchData.Index { return index } public var endIndex: DispatchData.Index { return index + bytes.count } public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> ResultType) rethrows -> ResultType { return try body(UnsafeRawBufferPointer(bytes)) } } public var regions: [Region] { var regions = [Region]() enumerateBytes { (bytes, index, stop) in regions.append(Region(bytes: bytes, index: index, owner: self)) } return regions } }