| #[doc(hidden)] |
| #[repr(transparent)] |
| pub struct IPreallocatedWorkItem(::windows_core::IUnknown); |
| unsafe impl ::windows_core::Interface for IPreallocatedWorkItem { |
| type Vtable = IPreallocatedWorkItem_Vtbl; |
| } |
| impl ::core::clone::Clone for IPreallocatedWorkItem { |
| fn clone(&self) -> Self { |
| Self(self.0.clone()) |
| } |
| } |
| unsafe impl ::windows_core::ComInterface for IPreallocatedWorkItem { |
| const IID: ::windows_core::GUID = ::windows_core::GUID::from_u128(0xb6daa9fc_bc5b_401a_a8b2_6e754d14daa6); |
| } |
| #[repr(C)] |
| #[doc(hidden)] |
| pub struct IPreallocatedWorkItem_Vtbl { |
| pub base__: ::windows_core::IInspectable_Vtbl, |
| #[cfg(feature = "Foundation")] |
| pub RunAsync: unsafe extern "system" fn(this: *mut ::core::ffi::c_void, result__: *mut *mut ::core::ffi::c_void) -> ::windows_core::HRESULT, |
| #[cfg(not(feature = "Foundation"))] |
| RunAsync: usize, |
| } |
| #[doc(hidden)] |
| #[repr(transparent)] |
| pub struct IPreallocatedWorkItemFactory(::windows_core::IUnknown); |
| unsafe impl ::windows_core::Interface for IPreallocatedWorkItemFactory { |
| type Vtable = IPreallocatedWorkItemFactory_Vtbl; |
| } |
| impl ::core::clone::Clone for IPreallocatedWorkItemFactory { |
| fn clone(&self) -> Self { |
| Self(self.0.clone()) |
| } |
| } |
| unsafe impl ::windows_core::ComInterface for IPreallocatedWorkItemFactory { |
| const IID: ::windows_core::GUID = ::windows_core::GUID::from_u128(0xe3d32b45_dfea_469b_82c5_f6e3cefdeafb); |
| } |
| #[repr(C)] |
| #[doc(hidden)] |
| pub struct IPreallocatedWorkItemFactory_Vtbl { |
| pub base__: ::windows_core::IInspectable_Vtbl, |
| #[cfg(feature = "Foundation")] |
| pub CreateWorkItem: unsafe extern "system" fn(this: *mut ::core::ffi::c_void, handler: *mut ::core::ffi::c_void, result__: *mut *mut ::core::ffi::c_void) -> ::windows_core::HRESULT, |
| #[cfg(not(feature = "Foundation"))] |
| CreateWorkItem: usize, |
| #[cfg(feature = "Foundation")] |
| pub CreateWorkItemWithPriority: unsafe extern "system" fn(this: *mut ::core::ffi::c_void, handler: *mut ::core::ffi::c_void, priority: super::WorkItemPriority, result__: *mut *mut ::core::ffi::c_void) -> ::windows_core::HRESULT, |
| #[cfg(not(feature = "Foundation"))] |
| CreateWorkItemWithPriority: usize, |
| #[cfg(feature = "Foundation")] |
| pub CreateWorkItemWithPriorityAndOptions: unsafe extern "system" fn(this: *mut ::core::ffi::c_void, handler: *mut ::core::ffi::c_void, priority: super::WorkItemPriority, options: super::WorkItemOptions, result__: *mut *mut ::core::ffi::c_void) -> ::windows_core::HRESULT, |
| #[cfg(not(feature = "Foundation"))] |
| CreateWorkItemWithPriorityAndOptions: usize, |
| } |
| #[doc(hidden)] |
| #[repr(transparent)] |
| pub struct ISignalNotifier(::windows_core::IUnknown); |
| unsafe impl ::windows_core::Interface for ISignalNotifier { |
| type Vtable = ISignalNotifier_Vtbl; |
| } |
| impl ::core::clone::Clone for ISignalNotifier { |
| fn clone(&self) -> Self { |
| Self(self.0.clone()) |
| } |
| } |
| unsafe impl ::windows_core::ComInterface for ISignalNotifier { |
| const IID: ::windows_core::GUID = ::windows_core::GUID::from_u128(0x14285e06_63a7_4713_b6d9_62f64b56fb8b); |
| } |
| #[repr(C)] |
| #[doc(hidden)] |
| pub struct ISignalNotifier_Vtbl { |
| pub base__: ::windows_core::IInspectable_Vtbl, |
| pub Enable: unsafe extern "system" fn(this: *mut ::core::ffi::c_void) -> ::windows_core::HRESULT, |
| pub Terminate: unsafe extern "system" fn(this: *mut ::core::ffi::c_void) -> ::windows_core::HRESULT, |
| } |
| #[doc(hidden)] |
| #[repr(transparent)] |
| pub struct ISignalNotifierStatics(::windows_core::IUnknown); |
| unsafe impl ::windows_core::Interface for ISignalNotifierStatics { |
| type Vtable = ISignalNotifierStatics_Vtbl; |
| } |
| impl ::core::clone::Clone for ISignalNotifierStatics { |
| fn clone(&self) -> Self { |
| Self(self.0.clone()) |
| } |
| } |
| unsafe impl ::windows_core::ComInterface for ISignalNotifierStatics { |
| const IID: ::windows_core::GUID = ::windows_core::GUID::from_u128(0x1c4e4566_8400_46d3_a115_7d0c0dfc9f62); |
| } |
| #[repr(C)] |
| #[doc(hidden)] |
| pub struct ISignalNotifierStatics_Vtbl { |
| pub base__: ::windows_core::IInspectable_Vtbl, |
| pub AttachToEvent: unsafe extern "system" fn(this: *mut ::core::ffi::c_void, name: ::std::mem::MaybeUninit<::windows_core::HSTRING>, handler: *mut ::core::ffi::c_void, result__: *mut *mut ::core::ffi::c_void) -> ::windows_core::HRESULT, |
| #[cfg(feature = "Foundation")] |
| pub AttachToEventWithTimeout: unsafe extern "system" fn(this: *mut ::core::ffi::c_void, name: ::std::mem::MaybeUninit<::windows_core::HSTRING>, handler: *mut ::core::ffi::c_void, timeout: super::super::super::Foundation::TimeSpan, result__: *mut *mut ::core::ffi::c_void) -> ::windows_core::HRESULT, |
| #[cfg(not(feature = "Foundation"))] |
| AttachToEventWithTimeout: usize, |
| pub AttachToSemaphore: unsafe extern "system" fn(this: *mut ::core::ffi::c_void, name: ::std::mem::MaybeUninit<::windows_core::HSTRING>, handler: *mut ::core::ffi::c_void, result__: *mut *mut ::core::ffi::c_void) -> ::windows_core::HRESULT, |
| #[cfg(feature = "Foundation")] |
| pub AttachToSemaphoreWithTimeout: unsafe extern "system" fn(this: *mut ::core::ffi::c_void, name: ::std::mem::MaybeUninit<::windows_core::HSTRING>, handler: *mut ::core::ffi::c_void, timeout: super::super::super::Foundation::TimeSpan, result__: *mut *mut ::core::ffi::c_void) -> ::windows_core::HRESULT, |
| #[cfg(not(feature = "Foundation"))] |
| AttachToSemaphoreWithTimeout: usize, |
| } |
| #[doc = "*Required features: `\"System_Threading_Core\"`*"] |
| #[repr(transparent)] |
| pub struct PreallocatedWorkItem(::windows_core::IUnknown); |
| impl PreallocatedWorkItem { |
| #[doc = "*Required features: `\"Foundation\"`*"] |
| #[cfg(feature = "Foundation")] |
| pub fn RunAsync(&self) -> ::windows_core::Result<super::super::super::Foundation::IAsyncAction> { |
| let this = self; |
| unsafe { |
| let mut result__ = ::std::mem::zeroed(); |
| (::windows_core::Interface::vtable(this).RunAsync)(::windows_core::Interface::as_raw(this), &mut result__).from_abi(result__) |
| } |
| } |
| #[doc = "*Required features: `\"Foundation\"`*"] |
| #[cfg(feature = "Foundation")] |
| pub fn CreateWorkItem<P0>(handler: P0) -> ::windows_core::Result<PreallocatedWorkItem> |
| where |
| P0: ::windows_core::IntoParam<super::WorkItemHandler>, |
| { |
| Self::IPreallocatedWorkItemFactory(|this| unsafe { |
| let mut result__ = ::std::mem::zeroed(); |
| (::windows_core::Interface::vtable(this).CreateWorkItem)(::windows_core::Interface::as_raw(this), handler.into_param().abi(), &mut result__).from_abi(result__) |
| }) |
| } |
| #[doc = "*Required features: `\"Foundation\"`*"] |
| #[cfg(feature = "Foundation")] |
| pub fn CreateWorkItemWithPriority<P0>(handler: P0, priority: super::WorkItemPriority) -> ::windows_core::Result<PreallocatedWorkItem> |
| where |
| P0: ::windows_core::IntoParam<super::WorkItemHandler>, |
| { |
| Self::IPreallocatedWorkItemFactory(|this| unsafe { |
| let mut result__ = ::std::mem::zeroed(); |
| (::windows_core::Interface::vtable(this).CreateWorkItemWithPriority)(::windows_core::Interface::as_raw(this), handler.into_param().abi(), priority, &mut result__).from_abi(result__) |
| }) |
| } |
| #[doc = "*Required features: `\"Foundation\"`*"] |
| #[cfg(feature = "Foundation")] |
| pub fn CreateWorkItemWithPriorityAndOptions<P0>(handler: P0, priority: super::WorkItemPriority, options: super::WorkItemOptions) -> ::windows_core::Result<PreallocatedWorkItem> |
| where |
| P0: ::windows_core::IntoParam<super::WorkItemHandler>, |
| { |
| Self::IPreallocatedWorkItemFactory(|this| unsafe { |
| let mut result__ = ::std::mem::zeroed(); |
| (::windows_core::Interface::vtable(this).CreateWorkItemWithPriorityAndOptions)(::windows_core::Interface::as_raw(this), handler.into_param().abi(), priority, options, &mut result__).from_abi(result__) |
| }) |
| } |
| #[doc(hidden)] |
| pub fn IPreallocatedWorkItemFactory<R, F: FnOnce(&IPreallocatedWorkItemFactory) -> ::windows_core::Result<R>>(callback: F) -> ::windows_core::Result<R> { |
| static SHARED: ::windows_core::imp::FactoryCache<PreallocatedWorkItem, IPreallocatedWorkItemFactory> = ::windows_core::imp::FactoryCache::new(); |
| SHARED.call(callback) |
| } |
| } |
| impl ::core::cmp::PartialEq for PreallocatedWorkItem { |
| fn eq(&self, other: &Self) -> bool { |
| self.0 == other.0 |
| } |
| } |
| impl ::core::cmp::Eq for PreallocatedWorkItem {} |
| impl ::core::fmt::Debug for PreallocatedWorkItem { |
| fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { |
| f.debug_tuple("PreallocatedWorkItem").field(&self.0).finish() |
| } |
| } |
| impl ::windows_core::RuntimeType for PreallocatedWorkItem { |
| const SIGNATURE: ::windows_core::imp::ConstBuffer = ::windows_core::imp::ConstBuffer::from_slice(b"rc(Windows.System.Threading.Core.PreallocatedWorkItem;{b6daa9fc-bc5b-401a-a8b2-6e754d14daa6})"); |
| } |
| impl ::core::clone::Clone for PreallocatedWorkItem { |
| fn clone(&self) -> Self { |
| Self(self.0.clone()) |
| } |
| } |
| unsafe impl ::windows_core::Interface for PreallocatedWorkItem { |
| type Vtable = IPreallocatedWorkItem_Vtbl; |
| } |
| unsafe impl ::windows_core::ComInterface for PreallocatedWorkItem { |
| const IID: ::windows_core::GUID = <IPreallocatedWorkItem as ::windows_core::ComInterface>::IID; |
| } |
| impl ::windows_core::RuntimeName for PreallocatedWorkItem { |
| const NAME: &'static str = "Windows.System.Threading.Core.PreallocatedWorkItem"; |
| } |
| ::windows_core::imp::interface_hierarchy!(PreallocatedWorkItem, ::windows_core::IUnknown, ::windows_core::IInspectable); |
| unsafe impl ::core::marker::Send for PreallocatedWorkItem {} |
| unsafe impl ::core::marker::Sync for PreallocatedWorkItem {} |
| #[doc = "*Required features: `\"System_Threading_Core\"`*"] |
| #[repr(transparent)] |
| pub struct SignalNotifier(::windows_core::IUnknown); |
| impl SignalNotifier { |
| pub fn Enable(&self) -> ::windows_core::Result<()> { |
| let this = self; |
| unsafe { (::windows_core::Interface::vtable(this).Enable)(::windows_core::Interface::as_raw(this)).ok() } |
| } |
| pub fn Terminate(&self) -> ::windows_core::Result<()> { |
| let this = self; |
| unsafe { (::windows_core::Interface::vtable(this).Terminate)(::windows_core::Interface::as_raw(this)).ok() } |
| } |
| pub fn AttachToEvent<P0>(name: &::windows_core::HSTRING, handler: P0) -> ::windows_core::Result<SignalNotifier> |
| where |
| P0: ::windows_core::IntoParam<SignalHandler>, |
| { |
| Self::ISignalNotifierStatics(|this| unsafe { |
| let mut result__ = ::std::mem::zeroed(); |
| (::windows_core::Interface::vtable(this).AttachToEvent)(::windows_core::Interface::as_raw(this), ::core::mem::transmute_copy(name), handler.into_param().abi(), &mut result__).from_abi(result__) |
| }) |
| } |
| #[doc = "*Required features: `\"Foundation\"`*"] |
| #[cfg(feature = "Foundation")] |
| pub fn AttachToEventWithTimeout<P0>(name: &::windows_core::HSTRING, handler: P0, timeout: super::super::super::Foundation::TimeSpan) -> ::windows_core::Result<SignalNotifier> |
| where |
| P0: ::windows_core::IntoParam<SignalHandler>, |
| { |
| Self::ISignalNotifierStatics(|this| unsafe { |
| let mut result__ = ::std::mem::zeroed(); |
| (::windows_core::Interface::vtable(this).AttachToEventWithTimeout)(::windows_core::Interface::as_raw(this), ::core::mem::transmute_copy(name), handler.into_param().abi(), timeout, &mut result__).from_abi(result__) |
| }) |
| } |
| pub fn AttachToSemaphore<P0>(name: &::windows_core::HSTRING, handler: P0) -> ::windows_core::Result<SignalNotifier> |
| where |
| P0: ::windows_core::IntoParam<SignalHandler>, |
| { |
| Self::ISignalNotifierStatics(|this| unsafe { |
| let mut result__ = ::std::mem::zeroed(); |
| (::windows_core::Interface::vtable(this).AttachToSemaphore)(::windows_core::Interface::as_raw(this), ::core::mem::transmute_copy(name), handler.into_param().abi(), &mut result__).from_abi(result__) |
| }) |
| } |
| #[doc = "*Required features: `\"Foundation\"`*"] |
| #[cfg(feature = "Foundation")] |
| pub fn AttachToSemaphoreWithTimeout<P0>(name: &::windows_core::HSTRING, handler: P0, timeout: super::super::super::Foundation::TimeSpan) -> ::windows_core::Result<SignalNotifier> |
| where |
| P0: ::windows_core::IntoParam<SignalHandler>, |
| { |
| Self::ISignalNotifierStatics(|this| unsafe { |
| let mut result__ = ::std::mem::zeroed(); |
| (::windows_core::Interface::vtable(this).AttachToSemaphoreWithTimeout)(::windows_core::Interface::as_raw(this), ::core::mem::transmute_copy(name), handler.into_param().abi(), timeout, &mut result__).from_abi(result__) |
| }) |
| } |
| #[doc(hidden)] |
| pub fn ISignalNotifierStatics<R, F: FnOnce(&ISignalNotifierStatics) -> ::windows_core::Result<R>>(callback: F) -> ::windows_core::Result<R> { |
| static SHARED: ::windows_core::imp::FactoryCache<SignalNotifier, ISignalNotifierStatics> = ::windows_core::imp::FactoryCache::new(); |
| SHARED.call(callback) |
| } |
| } |
| impl ::core::cmp::PartialEq for SignalNotifier { |
| fn eq(&self, other: &Self) -> bool { |
| self.0 == other.0 |
| } |
| } |
| impl ::core::cmp::Eq for SignalNotifier {} |
| impl ::core::fmt::Debug for SignalNotifier { |
| fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { |
| f.debug_tuple("SignalNotifier").field(&self.0).finish() |
| } |
| } |
| impl ::windows_core::RuntimeType for SignalNotifier { |
| const SIGNATURE: ::windows_core::imp::ConstBuffer = ::windows_core::imp::ConstBuffer::from_slice(b"rc(Windows.System.Threading.Core.SignalNotifier;{14285e06-63a7-4713-b6d9-62f64b56fb8b})"); |
| } |
| impl ::core::clone::Clone for SignalNotifier { |
| fn clone(&self) -> Self { |
| Self(self.0.clone()) |
| } |
| } |
| unsafe impl ::windows_core::Interface for SignalNotifier { |
| type Vtable = ISignalNotifier_Vtbl; |
| } |
| unsafe impl ::windows_core::ComInterface for SignalNotifier { |
| const IID: ::windows_core::GUID = <ISignalNotifier as ::windows_core::ComInterface>::IID; |
| } |
| impl ::windows_core::RuntimeName for SignalNotifier { |
| const NAME: &'static str = "Windows.System.Threading.Core.SignalNotifier"; |
| } |
| ::windows_core::imp::interface_hierarchy!(SignalNotifier, ::windows_core::IUnknown, ::windows_core::IInspectable); |
| unsafe impl ::core::marker::Send for SignalNotifier {} |
| unsafe impl ::core::marker::Sync for SignalNotifier {} |
| #[doc = "*Required features: `\"System_Threading_Core\"`*"] |
| #[repr(transparent)] |
| pub struct SignalHandler(pub ::windows_core::IUnknown); |
| impl SignalHandler { |
| pub fn new<F: FnMut(::core::option::Option<&SignalNotifier>, bool) -> ::windows_core::Result<()> + ::core::marker::Send + 'static>(invoke: F) -> Self { |
| let com = SignalHandlerBox::<F> { vtable: &SignalHandlerBox::<F>::VTABLE, count: ::windows_core::imp::RefCount::new(1), invoke }; |
| unsafe { ::core::mem::transmute(::std::boxed::Box::new(com)) } |
| } |
| pub fn Invoke<P0>(&self, signalnotifier: P0, timedout: bool) -> ::windows_core::Result<()> |
| where |
| P0: ::windows_core::IntoParam<SignalNotifier>, |
| { |
| let this = self; |
| unsafe { (::windows_core::Interface::vtable(this).Invoke)(::windows_core::Interface::as_raw(this), signalnotifier.into_param().abi(), timedout).ok() } |
| } |
| } |
| #[repr(C)] |
| struct SignalHandlerBox<F: FnMut(::core::option::Option<&SignalNotifier>, bool) -> ::windows_core::Result<()> + ::core::marker::Send + 'static> { |
| vtable: *const SignalHandler_Vtbl, |
| invoke: F, |
| count: ::windows_core::imp::RefCount, |
| } |
| impl<F: FnMut(::core::option::Option<&SignalNotifier>, bool) -> ::windows_core::Result<()> + ::core::marker::Send + 'static> SignalHandlerBox<F> { |
| const VTABLE: SignalHandler_Vtbl = SignalHandler_Vtbl { |
| base__: ::windows_core::IUnknown_Vtbl { QueryInterface: Self::QueryInterface, AddRef: Self::AddRef, Release: Self::Release }, |
| Invoke: Self::Invoke, |
| }; |
| unsafe extern "system" fn QueryInterface(this: *mut ::core::ffi::c_void, iid: &::windows_core::GUID, interface: *mut *const ::core::ffi::c_void) -> ::windows_core::HRESULT { |
| let this = this as *mut *mut ::core::ffi::c_void as *mut Self; |
| *interface = if iid == &<SignalHandler as ::windows_core::ComInterface>::IID || iid == &<::windows_core::IUnknown as ::windows_core::ComInterface>::IID || iid == &<::windows_core::imp::IAgileObject as ::windows_core::ComInterface>::IID { &mut (*this).vtable as *mut _ as _ } else { ::core::ptr::null_mut() }; |
| if (*interface).is_null() { |
| ::windows_core::HRESULT(-2147467262) |
| } else { |
| (*this).count.add_ref(); |
| ::windows_core::HRESULT(0) |
| } |
| } |
| unsafe extern "system" fn AddRef(this: *mut ::core::ffi::c_void) -> u32 { |
| let this = this as *mut *mut ::core::ffi::c_void as *mut Self; |
| (*this).count.add_ref() |
| } |
| unsafe extern "system" fn Release(this: *mut ::core::ffi::c_void) -> u32 { |
| let this = this as *mut *mut ::core::ffi::c_void as *mut Self; |
| let remaining = (*this).count.release(); |
| if remaining == 0 { |
| let _ = ::std::boxed::Box::from_raw(this); |
| } |
| remaining |
| } |
| unsafe extern "system" fn Invoke(this: *mut ::core::ffi::c_void, signalnotifier: *mut ::core::ffi::c_void, timedout: bool) -> ::windows_core::HRESULT { |
| let this = this as *mut *mut ::core::ffi::c_void as *mut Self; |
| ((*this).invoke)(::windows_core::from_raw_borrowed(&signalnotifier), timedout).into() |
| } |
| } |
| impl ::core::cmp::PartialEq for SignalHandler { |
| fn eq(&self, other: &Self) -> bool { |
| self.0 == other.0 |
| } |
| } |
| impl ::core::cmp::Eq for SignalHandler {} |
| impl ::core::fmt::Debug for SignalHandler { |
| fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { |
| f.debug_tuple("SignalHandler").field(&self.0).finish() |
| } |
| } |
| unsafe impl ::windows_core::Interface for SignalHandler { |
| type Vtable = SignalHandler_Vtbl; |
| } |
| impl ::core::clone::Clone for SignalHandler { |
| fn clone(&self) -> Self { |
| Self(self.0.clone()) |
| } |
| } |
| unsafe impl ::windows_core::ComInterface for SignalHandler { |
| const IID: ::windows_core::GUID = ::windows_core::GUID::from_u128(0x923c402e_4721_440e_9dda_55b6f2e07710); |
| } |
| impl ::windows_core::RuntimeType for SignalHandler { |
| const SIGNATURE: ::windows_core::imp::ConstBuffer = ::windows_core::imp::ConstBuffer::from_slice(b"{923c402e-4721-440e-9dda-55b6f2e07710}"); |
| } |
| #[repr(C)] |
| #[doc(hidden)] |
| pub struct SignalHandler_Vtbl { |
| pub base__: ::windows_core::IUnknown_Vtbl, |
| pub Invoke: unsafe extern "system" fn(this: *mut ::core::ffi::c_void, signalnotifier: *mut ::core::ffi::c_void, timedout: bool) -> ::windows_core::HRESULT, |
| } |