use crate::*;
#[cfg(feature = "CFBundle")]
unsafe impl Send for CFBundle {}
#[cfg(feature = "CFBundle")]
unsafe impl Sync for CFBundle {}
#[cfg(feature = "CFNotificationCenter")]
unsafe impl Send for CFNotificationCenter {}
#[cfg(feature = "CFNotificationCenter")]
unsafe impl Sync for CFNotificationCenter {}
#[cfg(feature = "CFUUID")]
unsafe impl Send for CFUUID {}
#[cfg(feature = "CFUUID")]
unsafe impl Sync for CFUUID {}
#[cfg(feature = "CFNumber")]
unsafe impl Send for CFBoolean {}
#[cfg(feature = "CFNumber")]
unsafe impl Sync for CFBoolean {}
#[cfg(feature = "CFNumber")]
unsafe impl Send for CFNumber {}
#[cfg(feature = "CFNumber")]
unsafe impl Sync for CFNumber {}
#[cfg(feature = "CFDate")]
unsafe impl Send for CFDate {}
#[cfg(feature = "CFDate")]
unsafe impl Sync for CFDate {}
#[cfg(feature = "CFError")]
unsafe impl Send for CFError {}
#[cfg(feature = "CFError")]
unsafe impl Sync for CFError {}
#[cfg(feature = "CFLocale")]
unsafe impl Send for CFLocale {}
#[cfg(feature = "CFLocale")]
unsafe impl Sync for CFLocale {}
unsafe impl Send for CFNull {}
unsafe impl Sync for CFNull {}
#[cfg(feature = "CFDate")]
unsafe impl Send for CFTimeZone {}
#[cfg(feature = "CFDate")]
unsafe impl Sync for CFTimeZone {}
#[cfg(feature = "CFURL")]
unsafe impl Send for CFURL {}
#[cfg(feature = "CFURL")]
unsafe impl Sync for CFURL {}
#[allow(unused_macros)]
#[cfg(test)]
mod tests {
use super::*;
macro_rules! not_thread_safe {
($($ty:ty),*) => {$(
static_assertions::assert_not_impl_any!($ty: Send, Sync);
)?};
}
macro_rules! thread_safe {
($($ty:ty),*) => {$(
static_assertions::assert_impl_all!($ty: Send, Sync);
)?};
}
#[test]
fn base() {
not_thread_safe!(CFType, CFPropertyList);
not_thread_safe!(CFAllocator);
}
#[test]
fn mutable_or_mutable_variant() {
#[cfg(feature = "CFBag")]
not_thread_safe!(CFBag<u32>, CFMutableBag<u32>);
#[cfg(feature = "CFBinaryHeap")]
not_thread_safe!(CFBinaryHeap);
#[cfg(feature = "CFBitVector")]
not_thread_safe!(CFBitVector, CFMutableBitVector);
#[cfg(feature = "CFDateFormatter")]
not_thread_safe!(CFDateFormatter); #[cfg(feature = "CFFileDescriptor")]
not_thread_safe!(CFFileDescriptor);
#[cfg(feature = "CFNumberFormatter")]
not_thread_safe!(CFNumberFormatter); #[cfg(feature = "CFSocket")]
not_thread_safe!(CFSocket);
#[cfg(feature = "CFStringTokenizer")]
not_thread_safe!(CFStringTokenizer);
#[cfg(feature = "CFTree")]
not_thread_safe!(CFTree);
#[cfg(feature = "CFURLEnumerator")]
not_thread_safe!(CFURLEnumerator);
#[cfg(feature = "CFUserNotification")]
not_thread_safe!(CFUserNotification);
#[cfg(feature = "CFArray")]
not_thread_safe!(CFArray<u32>, CFMutableArray<u32>);
#[cfg(feature = "CFAttributedString")]
not_thread_safe!(CFAttributedString, CFMutableAttributedString);
#[cfg(feature = "CFCalendar")]
not_thread_safe!(CFCalendar);
#[cfg(feature = "CFCharacterSet")]
not_thread_safe!(CFCharacterSet, CFMutableCharacterSet);
#[cfg(feature = "CFData")]
not_thread_safe!(CFData, CFMutableData);
#[cfg(feature = "CFDictionary")]
not_thread_safe!(CFDictionary<u32, u32>, CFMutableDictionary<u32, u32>);
#[cfg(feature = "CFFileSecurity")]
not_thread_safe!(CFFileSecurity);
#[cfg(feature = "CFMachPort")]
not_thread_safe!(CFMachPort);
#[cfg(feature = "CFMessagePort")]
not_thread_safe!(CFMessagePort);
#[cfg(feature = "CFRunLoop")]
not_thread_safe!(CFRunLoopTimer);
#[cfg(feature = "CFSet")]
not_thread_safe!(CFSet<u32>, CFMutableSet<u32>);
#[cfg(feature = "CFString")]
not_thread_safe!(CFString, CFMutableString);
#[cfg(feature = "CFStream")]
not_thread_safe!(CFReadStream, CFWriteStream);
}
#[test]
fn immutable() {
#[cfg(feature = "CFBundle")]
thread_safe!(CFBundle);
#[cfg(feature = "CFNotificationCenter")]
thread_safe!(CFNotificationCenter);
#[cfg(feature = "CFUUID")]
thread_safe!(CFUUID);
#[cfg(feature = "CFNumber")]
thread_safe!(CFBoolean, CFNumber);
#[cfg(feature = "CFDate")]
thread_safe!(CFDate);
#[cfg(feature = "CFError")]
thread_safe!(CFError);
#[cfg(feature = "CFLocale")]
thread_safe!(CFLocale);
thread_safe!(CFNull);
#[cfg(feature = "CFDate")]
thread_safe!(CFTimeZone);
#[cfg(feature = "CFURL")]
thread_safe!(CFURL);
}
#[test]
fn uncertain() {
#[cfg(feature = "CFBundle")]
not_thread_safe!(CFPlugIn);
#[cfg(feature = "CFPlugIn")]
not_thread_safe!(CFPlugInInstance);
#[cfg(feature = "CFRunLoop")]
not_thread_safe!(CFRunLoop, CFRunLoopSource, CFRunLoopObserver);
}
}