//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.System.Threading.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        interface IAsyncAction;

        typedef struct TimeSpan TimeSpan;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace System
    {
        namespace Threading
        {
            delegate WorkItemHandler;

            typedef enum WorkItemOptions WorkItemOptions;

            typedef enum WorkItemPriority WorkItemPriority;
        }
    }
}
namespace Windows
{
    namespace System
    {
        namespace Threading
        {
            namespace Core
            {
                delegate SignalHandler;

                interface IPreallocatedWorkItem;

                interface IPreallocatedWorkItemFactory;

                interface ISignalNotifier;

                interface ISignalNotifierStatics;

                runtimeclass PreallocatedWorkItem;

                runtimeclass SignalNotifier;
            }
        }
    }
}

// Generic instantiations

// Type definition
namespace Windows
{
    namespace System
    {
        namespace Threading
        {
            namespace Core
            {
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [uuid(923C402E-4721-440E-9DDA-55B6F2E07710)]
                delegate
                    HRESULT SignalHandler([in] Windows.System.Threading.Core.SignalNotifier* signalNotifier, [in] boolean timedOut);

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.System.Threading.Core.PreallocatedWorkItem)]
                [uuid(B6DAA9FC-BC5B-401A-A8B2-6E754D14DAA6)]
                interface IPreallocatedWorkItem : IInspectable
                {
                    HRESULT RunAsync([out] [retval] Windows.Foundation.IAsyncAction** operation);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.System.Threading.Core.PreallocatedWorkItem)]
                [uuid(E3D32B45-DFEA-469B-82C5-F6E3CEFDEAFB)]
                interface IPreallocatedWorkItemFactory : IInspectable
                {
                    HRESULT CreateWorkItem([in] Windows.System.Threading.WorkItemHandler* handler, [out] [retval] Windows.System.Threading.Core.PreallocatedWorkItem** workItem);
                    HRESULT CreateWorkItemWithPriority([in] Windows.System.Threading.WorkItemHandler* handler, [in] Windows.System.Threading.WorkItemPriority priority, [out] [retval] Windows.System.Threading.Core.PreallocatedWorkItem** WorkItem);
                    HRESULT CreateWorkItemWithPriorityAndOptions([in] Windows.System.Threading.WorkItemHandler* handler, [in] Windows.System.Threading.WorkItemPriority priority, [in] Windows.System.Threading.WorkItemOptions options, [out] [retval] Windows.System.Threading.Core.PreallocatedWorkItem** WorkItem);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.System.Threading.Core.SignalNotifier)]
                [uuid(14285E06-63A7-4713-B6D9-62F64B56FB8B)]
                interface ISignalNotifier : IInspectable
                {
                    HRESULT Enable();
                    HRESULT Terminate();
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.System.Threading.Core.SignalNotifier)]
                [uuid(1C4E4566-8400-46D3-A115-7D0C0DFC9F62)]
                interface ISignalNotifierStatics : IInspectable
                {
                    [overload("AttachToEvent")] HRESULT AttachToEvent([in] HSTRING name, [in] Windows.System.Threading.Core.SignalHandler* handler, [out] [retval] Windows.System.Threading.Core.SignalNotifier** signalNotifier);
                    [overload("AttachToEvent")] HRESULT AttachToEventWithTimeout([in] HSTRING name, [in] Windows.System.Threading.Core.SignalHandler* handler, [in] Windows.Foundation.TimeSpan timeout, [out] [retval] Windows.System.Threading.Core.SignalNotifier** signalNotifier);
                    [overload("AttachToSemaphore")] HRESULT AttachToSemaphore([in] HSTRING name, [in] Windows.System.Threading.Core.SignalHandler* handler, [out] [retval] Windows.System.Threading.Core.SignalNotifier** signalNotifier);
                    [overload("AttachToSemaphore")] HRESULT AttachToSemaphoreWithTimeout([in] HSTRING name, [in] Windows.System.Threading.Core.SignalHandler* handler, [in] Windows.Foundation.TimeSpan timeout, [out] [retval] Windows.System.Threading.Core.SignalNotifier** signalNotifier);
                }

                [activatable(Windows.System.Threading.Core.IPreallocatedWorkItemFactory, Windows.Foundation.UniversalApiContract, 1.0)]
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass PreallocatedWorkItem
                {
                    [default] interface Windows.System.Threading.Core.IPreallocatedWorkItem;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [static(Windows.System.Threading.Core.ISignalNotifierStatics, Windows.Foundation.UniversalApiContract, 1.0)]
                [threading(both)]
                runtimeclass SignalNotifier
                {
                    [default] interface Windows.System.Threading.Core.ISignalNotifier;
                }
            }
        }
    }
}
