Merge pull request #168 from dgrove-oss/libdispatch-time-signedness
Correct signedness handling of DispatchTimeInterval
diff --git a/src/swift/Block.swift b/src/swift/Block.swift
index 0742190..adddc53 100644
--- a/src/swift/Block.swift
+++ b/src/swift/Block.swift
@@ -37,14 +37,13 @@
@available(OSX 10.10, iOS 8.0, *)
public class DispatchWorkItem {
internal var _block: _DispatchBlock
- internal var _group: DispatchGroup?
public init(qos: DispatchQoS = .unspecified, flags: DispatchWorkItemFlags = [], block: @escaping @convention(block) () -> ()) {
_block = dispatch_block_create_with_qos_class(dispatch_block_flags_t(flags.rawValue),
qos.qosClass.rawValue.rawValue, Int32(qos.relativePriority), block)
}
- // Used by DispatchQueue.synchronously<T> to provide a @noescape path through
+ // Used by DispatchQueue.synchronously<T> to provide a path through
// dispatch_block_t, as we know the lifetime of the block in question.
internal init(flags: DispatchWorkItemFlags = [], noescapeBlock: () -> ()) {
_block = _swift_dispatch_block_create_noescape(dispatch_block_flags_t(flags.rawValue), noescapeBlock)
diff --git a/src/swift/Data.swift b/src/swift/Data.swift
index e81ea99..7acf50d 100644
--- a/src/swift/Data.swift
+++ b/src/swift/Data.swift
@@ -49,7 +49,6 @@
/// Initialize a `Data` with copied memory content.
///
/// - parameter bytes: A pointer to the memory. It will be copied.
- /// - parameter count: The number of bytes to copy.
public init(bytes buffer: UnsafeBufferPointer<UInt8>) {
let d = dispatch_data_create(buffer.baseAddress!, buffer.count, nil, _dispatch_data_destructor_default())
self.init(data: d)
@@ -88,7 +87,7 @@
public func enumerateBytes(
block: (_ buffer: UnsafeBufferPointer<UInt8>, _ byteIndex: Int, _ stop: inout Bool) -> Void)
{
- _swift_dispatch_data_apply(__wrapped.__wrapped) { (data: dispatch_data_t, offset: Int, ptr: UnsafeRawPointer, size: Int) in
+ _swift_dispatch_data_apply(__wrapped.__wrapped) { (_, offset: Int, ptr: UnsafeRawPointer, size: Int) in
let bytePtr = ptr.bindMemory(to: UInt8.self, capacity: size)
let bp = UnsafeBufferPointer(start: bytePtr, count: size)
var stop = false
@@ -124,7 +123,7 @@
}
}
- private func _copyBytesHelper(to pointer: UnsafeMutablePointer<UInt8>, from range: CountableRange<Index>) {
+ private func _copyBytesHelper(to pointer: UnsafeMutableRawPointer, from range: CountableRange<Index>) {
var copiedCount = 0
_ = CDispatch.dispatch_data_apply(__wrapped.__wrapped) { (data: dispatch_data_t, offset: Int, ptr: UnsafeRawPointer, size: Int) in
let limit = Swift.min((range.endIndex - range.startIndex) - copiedCount, size)
@@ -179,10 +178,7 @@
guard !copyRange.isEmpty else { return 0 }
- let bufferCapacity = buffer.count * MemoryLayout<DestinationType>.stride
- buffer.baseAddress?.withMemoryRebound(to: UInt8.self, capacity: bufferCapacity) {
- _copyBytesHelper(to: $0, from: copyRange)
- }
+ _copyBytesHelper(to: buffer.baseAddress!, from: copyRange)
return copyRange.count
}
@@ -244,7 +240,7 @@
public struct DispatchDataIterator : IteratorProtocol, Sequence {
- /// Create an iterator over the given DisaptchData
+ /// Create an iterator over the given DispatchData
public init(_data: DispatchData) {
var ptr: UnsafeRawPointer?
self._count = 0
diff --git a/src/swift/Private.swift b/src/swift/Private.swift
index dad6bd7..db74a82 100644
--- a/src/swift/Private.swift
+++ b/src/swift/Private.swift
@@ -14,13 +14,13 @@
import CDispatch
-@available(*, unavailable, renamed:"DispatchQueue.init(label:attributes:target:)")
+@available(*, unavailable, renamed:"DispatchQueue.init(label:qos:attributes:autoreleaseFrequency:target:)")
public func dispatch_queue_create(_ label: UnsafePointer<Int8>?, _ attr: dispatch_queue_attr_t?) -> DispatchQueue
{
fatalError()
}
-@available(*, unavailable, renamed:"DispatchQueue.init(label:attributes:target:)")
+@available(*, unavailable, renamed:"DispatchQueue.init(label:qos:attributes:autoreleaseFrequency:target:)")
public func dispatch_queue_create_with_target(_ label: UnsafePointer<Int8>?, _ attr: dispatch_queue_attr_t?, _ queue: DispatchQueue?) -> DispatchQueue
{
fatalError()
@@ -158,25 +158,25 @@
fatalError()
}
-@available(*, unavailable, renamed: "DispatchQueue.main")
+@available(*, unavailable, renamed: "getter:DispatchQueue.main()")
public func dispatch_get_main_queue() -> DispatchQueue
{
fatalError()
}
-@available(*, unavailable, renamed:"DispatchQueueAttributes.initiallyInactive")
+@available(*, unavailable, renamed:"DispatchQueue.Attributes.initiallyInactive")
public func dispatch_queue_attr_make_initially_inactive(_ attr: dispatch_queue_attr_t?) -> dispatch_queue_attr_t
{
fatalError()
}
-@available(*, unavailable, renamed:"DispatchQueueAttributes.autoreleaseWorkItem")
+@available(*, unavailable, renamed:"DispatchQueue.AutoreleaseFrequency.workItem")
public func dispatch_queue_attr_make_with_autorelease_frequency(_ attr: dispatch_queue_attr_t?, _ frequency: dispatch_autorelease_frequency_t) -> dispatch_queue_attr_t
{
fatalError()
}
-@available(*, unavailable, renamed:"DispatchQueueAttributes.qosUserInitiated")
+@available(*, unavailable, renamed:"DispatchQoS")
public func dispatch_queue_attr_make_with_qos_class(_ attr: dispatch_queue_attr_t?, _ qos_class: dispatch_qos_class_t, _ relative_priority: Int32) -> dispatch_queue_attr_t
{
fatalError()
@@ -194,19 +194,19 @@
fatalError()
}
-@available(*, unavailable, renamed:"DispatchQueue.after(self:when:execute:)")
+@available(*, unavailable, renamed:"DispatchQueue.asyncAfter(self:deadline:qos:flags:execute:)")
public func dispatch_after(_ when: dispatch_time_t, _ queue: DispatchQueue, _ block: @escaping () -> Void)
{
fatalError()
}
-@available(*, unavailable, renamed:"DispatchQueue.asynchronously(self:group:qos:flags:execute:)")
+@available(*, unavailable, renamed:"DispatchQueue.async(self:group:qos:flags:execute:)")
public func dispatch_barrier_async(_ queue: DispatchQueue, _ block: @escaping () -> Void)
{
fatalError()
}
-@available(*, unavailable, renamed:"DispatchQueue.synchronously(self:flags:execute:)")
+@available(*, unavailable, renamed:"DispatchQueue.sync(self:flags:execute:)")
public func dispatch_barrier_sync(_ queue: DispatchQueue, _ block: () -> Void)
{
fatalError()
@@ -338,22 +338,22 @@
fatalError()
}
-@available(*, unavailable, renamed: "DispatchQueue.GlobalAttributes.qosUserInitiated")
+@available(*, unavailable, renamed: "DispatchQueue.GlobalQueuePriority.high")
public var DISPATCH_QUEUE_PRIORITY_HIGH: Int {
fatalError()
}
-@available(*, unavailable, renamed: "DispatchQueue.GlobalAttributes.qosDefault")
+@available(*, unavailable, renamed: "DispatchQueue.GlobalQueuePriority.default")
public var DISPATCH_QUEUE_PRIORITY_DEFAULT: Int {
fatalError()
}
-@available(*, unavailable, renamed: "DispatchQueue.GlobalAttributes.qosUtility")
+@available(*, unavailable, renamed: "DispatchQueue.GlobalQueuePriority.low")
public var DISPATCH_QUEUE_PRIORITY_LOW: Int {
fatalError()
}
-@available(*, unavailable, renamed: "DispatchQueue.GlobalAttributes.qosBackground")
+@available(*, unavailable, renamed: "DispatchQueue.GlobalQueuePriority.background")
public var DISPATCH_QUEUE_PRIORITY_BACKGROUND: Int {
fatalError()
}
diff --git a/src/swift/Queue.swift b/src/swift/Queue.swift
index 8db1b68..155be8a 100644
--- a/src/swift/Queue.swift
+++ b/src/swift/Queue.swift
@@ -181,10 +181,15 @@
flags: DispatchWorkItemFlags = [],
execute work: @escaping @convention(block) () -> Void)
{
- if group == nil && qos == .unspecified && flags.isEmpty {
+ if group == nil && qos == .unspecified {
// Fast-path route for the most common API usage
- CDispatch.dispatch_async(self.__wrapped, work)
- return
+ if flags.isEmpty {
+ CDispatch.dispatch_async(self.__wrapped, work)
+ return
+ } else if flags == .barrier {
+ CDispatch.dispatch_barrier_async(self.__wrapped, work)
+ return
+ }
}
var block: @convention(block) () -> Void = work
diff --git a/src/swift/Wrapper.swift b/src/swift/Wrapper.swift
index 367c59a..ea340e2 100644
--- a/src/swift/Wrapper.swift
+++ b/src/swift/Wrapper.swift
@@ -153,7 +153,7 @@
_swift_dispatch_release(wrapped())
}
- public func sync(execute workItem: @noescape ()->()) {
+ public func sync(execute workItem: ()->()) {
dispatch_sync(self.__wrapped, workItem)
}
}