// This file is part of Desktop App Toolkit, // a set of libraries for developing nice desktop applications. // // For license and copyright information please follow this link: // https://github.com/desktop-app/legal/blob/master/LEGAL // #include #if defined CRL_USE_DISPATCH && !defined CRL_FORCE_COMMON_QUEUE #include #include namespace crl { namespace { dispatch_queue_t Unwrap(void *value) { return static_cast(value); } } // namespace auto queue::implementation::create() -> pointer { auto result = dispatch_queue_create(nullptr, DISPATCH_QUEUE_SERIAL); if (!result) { std::terminate(); } return result; } void queue::implementation::operator()(pointer value) { if (value) { dispatch_release(Unwrap(value)); } }; queue::queue() : _handle(implementation::create()) { } void queue::async_plain(void (*callable)(void*), void *argument) { dispatch_async_f( Unwrap(_handle.get()), argument, callable); } void queue::sync_plain(void (*callable)(void*), void *argument) { dispatch_sync_f( Unwrap(_handle.get()), argument, callable); } } // namespace crl #endif // CRL_USE_DISPATCH && !CRL_FORCE_COMMON_QUEUE