annotate DEPENDENCIES/generic/include/boost/detail/winapi/synchronization.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // synchronizaion.hpp --------------------------------------------------------------//
Chris@16 2
Chris@16 3 // Copyright 2010 Vicente J. Botet Escriba
Chris@16 4
Chris@16 5 // Distributed under the Boost Software License, Version 1.0.
Chris@16 6 // See http://www.boost.org/LICENSE_1_0.txt
Chris@16 7
Chris@16 8
Chris@16 9 #ifndef BOOST_DETAIL_WINAPI_SYNCHRONIZATION_HPP
Chris@16 10 #define BOOST_DETAIL_WINAPI_SYNCHRONIZATION_HPP
Chris@16 11
Chris@16 12 #include <boost/detail/winapi/basic_types.hpp>
Chris@16 13
Chris@16 14 #ifdef BOOST_HAS_PRAGMA_ONCE
Chris@16 15 #pragma once
Chris@16 16 #endif
Chris@16 17
Chris@16 18 namespace boost
Chris@16 19 {
Chris@16 20 namespace detail
Chris@16 21 {
Chris@16 22 namespace winapi
Chris@16 23 {
Chris@16 24 #if defined( BOOST_USE_WINDOWS_H )
Chris@16 25 typedef ::CRITICAL_SECTION CRITICAL_SECTION_;
Chris@16 26 typedef ::PAPCFUNC PAPCFUNC_;
Chris@16 27
Chris@101 28 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
Chris@101 29 typedef ::INIT_ONCE INIT_ONCE_;
Chris@101 30 typedef ::PINIT_ONCE PINIT_ONCE_;
Chris@101 31 typedef ::LPINIT_ONCE LPINIT_ONCE_;
Chris@101 32 #define BOOST_DETAIL_WINAPI_INIT_ONCE_STATIC_INIT INIT_ONCE_STATIC_INIT
Chris@101 33 typedef ::PINIT_ONCE_FN PINIT_ONCE_FN_;
Chris@101 34
Chris@101 35 typedef ::SRWLOCK SRWLOCK_;
Chris@101 36 typedef ::PSRWLOCK PSRWLOCK_;
Chris@101 37 #define BOOST_DETAIL_WINAPI_SRWLOCK_INIT SRWLOCK_INIT
Chris@101 38
Chris@101 39 typedef ::CONDITION_VARIABLE CONDITION_VARIABLE_;
Chris@101 40 typedef ::PCONDITION_VARIABLE PCONDITION_VARIABLE_;
Chris@101 41 #define BOOST_DETAIL_WINAPI_CONDITION_VARIABLE_INIT CONDITION_VARIABLE_INIT
Chris@101 42 #endif
Chris@101 43
Chris@16 44 using ::InitializeCriticalSection;
Chris@101 45 #if BOOST_USE_WINAPI_VERSION >= 0x0403
Chris@101 46 using ::InitializeCriticalSectionAndSpinCount;
Chris@101 47 #endif
Chris@16 48 using ::EnterCriticalSection;
Chris@16 49 using ::TryEnterCriticalSection;
Chris@16 50 using ::LeaveCriticalSection;
Chris@16 51 using ::DeleteCriticalSection;
Chris@16 52
Chris@16 53 # ifdef BOOST_NO_ANSI_APIS
Chris@16 54 using ::CreateMutexW;
Chris@101 55 using ::OpenMutexW;
Chris@16 56 using ::CreateEventW;
Chris@16 57 using ::OpenEventW;
Chris@16 58 using ::CreateSemaphoreW;
Chris@101 59 using ::OpenSemaphoreW;
Chris@16 60 # else
Chris@16 61 using ::CreateMutexA;
Chris@101 62 using ::OpenMutexA;
Chris@16 63 using ::CreateEventA;
Chris@16 64 using ::OpenEventA;
Chris@16 65 using ::CreateSemaphoreA;
Chris@101 66 using ::OpenSemaphoreA;
Chris@16 67 # endif
Chris@16 68 using ::ReleaseMutex;
Chris@16 69 using ::ReleaseSemaphore;
Chris@16 70 using ::SetEvent;
Chris@16 71 using ::ResetEvent;
Chris@16 72 using ::WaitForMultipleObjects;
Chris@16 73 using ::WaitForSingleObject;
Chris@16 74 using ::QueueUserAPC;
Chris@16 75
Chris@101 76 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
Chris@101 77 using ::InitOnceInitialize;
Chris@101 78 using ::InitOnceExecuteOnce;
Chris@101 79 using ::InitOnceBeginInitialize;
Chris@101 80 using ::InitOnceComplete;
Chris@101 81
Chris@101 82 using ::InitializeSRWLock;
Chris@101 83 using ::AcquireSRWLockExclusive;
Chris@101 84 using ::TryAcquireSRWLockExclusive;
Chris@101 85 using ::ReleaseSRWLockExclusive;
Chris@101 86 using ::AcquireSRWLockShared;
Chris@101 87 using ::TryAcquireSRWLockShared;
Chris@101 88 using ::ReleaseSRWLockShared;
Chris@101 89
Chris@101 90 using ::InitializeConditionVariable;
Chris@101 91 using ::WakeConditionVariable;
Chris@101 92 using ::WakeAllConditionVariable;
Chris@101 93 using ::SleepConditionVariableCS;
Chris@101 94 using ::SleepConditionVariableSRW;
Chris@101 95 #endif
Chris@101 96
Chris@16 97 const DWORD_ infinite = INFINITE;
Chris@16 98 const DWORD_ wait_abandoned = WAIT_ABANDONED;
Chris@16 99 const DWORD_ wait_object_0 = WAIT_OBJECT_0;
Chris@16 100 const DWORD_ wait_timeout = WAIT_TIMEOUT;
Chris@16 101 const DWORD_ wait_failed = WAIT_FAILED;
Chris@16 102
Chris@101 103 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
Chris@101 104 const DWORD_ init_once_async = INIT_ONCE_ASYNC;
Chris@101 105 const DWORD_ init_once_check_only = INIT_ONCE_CHECK_ONLY;
Chris@101 106 const DWORD_ init_once_init_failed = INIT_ONCE_INIT_FAILED;
Chris@101 107 const DWORD_ init_once_ctx_reserved_bits = INIT_ONCE_CTX_RESERVED_BITS;
Chris@101 108
Chris@101 109 const ULONG_ condition_variable_lockmode_shared = CONDITION_VARIABLE_LOCKMODE_SHARED;
Chris@101 110 #endif
Chris@101 111
Chris@16 112 #else // defined( BOOST_USE_WINDOWS_H )
Chris@16 113
Chris@16 114 extern "C" {
Chris@16 115
Chris@101 116 typedef struct CRITICAL_SECTION_
Chris@16 117 {
Chris@16 118 struct critical_section_debug * DebugInfo;
Chris@16 119 long LockCount;
Chris@16 120 long RecursionCount;
Chris@16 121 void * OwningThread;
Chris@16 122 void * LockSemaphore;
Chris@16 123 #if defined(_WIN64)
Chris@16 124 unsigned __int64 SpinCount;
Chris@16 125 #else
Chris@16 126 unsigned long SpinCount;
Chris@16 127 #endif
Chris@101 128 }
Chris@101 129 *PCRITICAL_SECTION_;
Chris@16 130
Chris@101 131 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
Chris@101 132 typedef union INIT_ONCE_
Chris@101 133 {
Chris@101 134 PVOID_ Ptr;
Chris@101 135 }
Chris@101 136 *PINIT_ONCE_, *LPINIT_ONCE_;
Chris@101 137 #define BOOST_DETAIL_WINAPI_INIT_ONCE_STATIC_INIT {0}
Chris@101 138 typedef BOOL_ (WINAPI *PINIT_ONCE_FN_)(PINIT_ONCE_ InitOnce, PVOID_ Parameter, PVOID_ *Context);
Chris@16 139
Chris@101 140 typedef struct SRWLOCK_
Chris@101 141 {
Chris@101 142 PVOID_ Ptr;
Chris@101 143 }
Chris@101 144 * PSRWLOCK_;
Chris@101 145 #define BOOST_DETAIL_WINAPI_SRWLOCK_INIT {0}
Chris@101 146
Chris@101 147 typedef struct CONDITION_VARIABLE_
Chris@101 148 {
Chris@101 149 PVOID_ Ptr;
Chris@101 150 }
Chris@101 151 * PCONDITION_VARIABLE_;
Chris@101 152 #define BOOST_DETAIL_WINAPI_CONDITION_VARIABLE_INIT {0}
Chris@101 153
Chris@101 154 #endif
Chris@101 155
Chris@101 156 __declspec(dllimport) void WINAPI
Chris@101 157 InitializeCriticalSection(PCRITICAL_SECTION_);
Chris@101 158 #if BOOST_USE_WINAPI_VERSION >= 0x0403
Chris@101 159 __declspec(dllimport) BOOL_ WINAPI
Chris@101 160 InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION_* lpCS, DWORD_ dwSpinCount);
Chris@101 161 #endif
Chris@101 162 __declspec(dllimport) void WINAPI
Chris@101 163 EnterCriticalSection(PCRITICAL_SECTION_);
Chris@101 164 __declspec(dllimport) BOOL_ WINAPI
Chris@101 165 TryEnterCriticalSection(PCRITICAL_SECTION_);
Chris@101 166 __declspec(dllimport) void WINAPI
Chris@101 167 LeaveCriticalSection(PCRITICAL_SECTION_);
Chris@101 168 __declspec(dllimport) void WINAPI
Chris@101 169 DeleteCriticalSection(PCRITICAL_SECTION_);
Chris@101 170
Chris@101 171 struct _SECURITY_ATTRIBUTES;
Chris@16 172 # ifdef BOOST_NO_ANSI_APIS
Chris@101 173 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 174 CreateMutexW(_SECURITY_ATTRIBUTES*, BOOL_, LPCWSTR_);
Chris@101 175 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 176 OpenMutexW(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName);
Chris@101 177 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 178 CreateSemaphoreW(_SECURITY_ATTRIBUTES*, LONG_, LONG_, LPCWSTR_);
Chris@101 179 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 180 OpenSemaphoreW(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName);
Chris@101 181 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 182 CreateEventW(_SECURITY_ATTRIBUTES*, BOOL_, BOOL_, LPCWSTR_);
Chris@101 183 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 184 OpenEventW(DWORD_, BOOL_, LPCWSTR_);
Chris@16 185 # else
Chris@101 186 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 187 CreateMutexA(_SECURITY_ATTRIBUTES*, BOOL_, LPCSTR_);
Chris@101 188 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 189 OpenMutexA(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName);
Chris@101 190 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 191 CreateSemaphoreA(_SECURITY_ATTRIBUTES*, LONG_, LONG_, LPCSTR_);
Chris@101 192 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 193 OpenSemaphoreA(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName);
Chris@101 194 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 195 CreateEventA(_SECURITY_ATTRIBUTES*, BOOL_, BOOL_, LPCSTR_);
Chris@101 196 __declspec(dllimport) HANDLE_ WINAPI
Chris@101 197 OpenEventA(DWORD_, BOOL_, LPCSTR_);
Chris@16 198 # endif
Chris@101 199 __declspec(dllimport) BOOL_ WINAPI
Chris@101 200 ReleaseMutex(HANDLE_);
Chris@101 201 __declspec(dllimport) DWORD_ WINAPI
Chris@101 202 WaitForSingleObject(HANDLE_, DWORD_);
Chris@101 203 __declspec(dllimport) DWORD_ WINAPI
Chris@101 204 WaitForMultipleObjects(DWORD_ nCount,
Chris@101 205 HANDLE_ const * lpHandles,
Chris@101 206 BOOL_ bWaitAll,
Chris@101 207 DWORD_ dwMilliseconds);
Chris@101 208 __declspec(dllimport) BOOL_ WINAPI
Chris@101 209 ReleaseSemaphore(HANDLE_, LONG_, LONG_*);
Chris@101 210 __declspec(dllimport) BOOL_ WINAPI
Chris@101 211 SetEvent(HANDLE_);
Chris@101 212 __declspec(dllimport) BOOL_ WINAPI
Chris@101 213 ResetEvent(HANDLE_);
Chris@101 214
Chris@101 215 typedef void (__stdcall *PAPCFUNC_)(ULONG_PTR_);
Chris@101 216 __declspec(dllimport) DWORD_ WINAPI
Chris@101 217 QueueUserAPC(PAPCFUNC_, HANDLE_, ULONG_PTR_);
Chris@101 218
Chris@101 219 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
Chris@101 220 __declspec(dllimport) void WINAPI InitOnceInitialize(PINIT_ONCE_);
Chris@101 221 __declspec(dllimport) BOOL_ WINAPI InitOnceExecuteOnce(PINIT_ONCE_ InitOnce, PINIT_ONCE_FN_ InitFn, PVOID_ Parameter, LPVOID_* Context);
Chris@101 222 __declspec(dllimport) BOOL_ WINAPI InitOnceBeginInitialize(LPINIT_ONCE_ lpInitOnce, DWORD_ dwFlags, BOOL_* fPending, LPVOID_* lpContext);
Chris@101 223 __declspec(dllimport) BOOL_ WINAPI InitOnceComplete(LPINIT_ONCE_ lpInitOnce, DWORD_ dwFlags, LPVOID_* lpContext);
Chris@101 224
Chris@101 225
Chris@101 226 __declspec(dllimport) void WINAPI InitializeSRWLock(PSRWLOCK_ SRWLock);
Chris@101 227 __declspec(dllimport) void WINAPI AcquireSRWLockExclusive(PSRWLOCK_ SRWLock);
Chris@101 228 __declspec(dllimport) BOOLEAN_ WINAPI TryAcquireSRWLockExclusive(PSRWLOCK_ SRWLock);
Chris@101 229 __declspec(dllimport) void WINAPI ReleaseSRWLockExclusive(PSRWLOCK_ SRWLock);
Chris@101 230 __declspec(dllimport) void WINAPI AcquireSRWLockShared(PSRWLOCK_ SRWLock);
Chris@101 231 __declspec(dllimport) BOOLEAN_ WINAPI TryAcquireSRWLockShared(PSRWLOCK_ SRWLock);
Chris@101 232 __declspec(dllimport) void WINAPI ReleaseSRWLockShared(PSRWLOCK_ SRWLock);
Chris@101 233
Chris@101 234 __declspec(dllimport) void WINAPI InitializeConditionVariable(PCONDITION_VARIABLE_ ConditionVariable);
Chris@101 235 __declspec(dllimport) void WINAPI WakeConditionVariable(PCONDITION_VARIABLE_ ConditionVariable);
Chris@101 236 __declspec(dllimport) void WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE_ ConditionVariable);
Chris@101 237 __declspec(dllimport) BOOL_ WINAPI SleepConditionVariableCS(PCONDITION_VARIABLE_ ConditionVariable, PCRITICAL_SECTION_ CriticalSection, DWORD_ dwMilliseconds);
Chris@101 238 __declspec(dllimport) BOOL_ WINAPI SleepConditionVariableSRW(PCONDITION_VARIABLE_ ConditionVariable, PSRWLOCK_ SRWLock, DWORD_ dwMilliseconds, ULONG_ Flags);
Chris@101 239 #endif
Chris@16 240
Chris@16 241 } // extern "C"
Chris@16 242
Chris@101 243 const DWORD_ infinite = (DWORD_)0xFFFFFFFF;
Chris@101 244 const DWORD_ wait_abandoned = 0x00000080L;
Chris@101 245 const DWORD_ wait_object_0 = 0x00000000L;
Chris@101 246 const DWORD_ wait_timeout = 0x00000102L;
Chris@101 247 const DWORD_ wait_failed = (DWORD_)0xFFFFFFFF;
Chris@101 248
Chris@101 249 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
Chris@101 250 const DWORD_ init_once_async = 0x00000002UL;
Chris@101 251 const DWORD_ init_once_check_only = 0x00000001UL;
Chris@101 252 const DWORD_ init_once_init_failed = 0x00000004UL;
Chris@101 253 const DWORD_ init_once_ctx_reserved_bits = 2;
Chris@101 254
Chris@101 255 const ULONG_ condition_variable_lockmode_shared = 0x00000001;
Chris@101 256 #endif
Chris@16 257
Chris@16 258 #endif // defined( BOOST_USE_WINDOWS_H )
Chris@16 259
Chris@101 260 const DWORD_ max_non_infinite_wait = (DWORD_)0xFFFFFFFE;
Chris@101 261
Chris@101 262 BOOST_FORCEINLINE HANDLE_ create_anonymous_mutex(_SECURITY_ATTRIBUTES* lpAttributes, BOOL_ bInitialOwner)
Chris@101 263 {
Chris@101 264 #ifdef BOOST_NO_ANSI_APIS
Chris@101 265 return CreateMutexW(lpAttributes, bInitialOwner, 0);
Chris@101 266 #else
Chris@101 267 return CreateMutexA(lpAttributes, bInitialOwner, 0);
Chris@101 268 #endif
Chris@101 269 }
Chris@101 270
Chris@101 271 BOOST_FORCEINLINE HANDLE_ create_anonymous_semaphore(_SECURITY_ATTRIBUTES* lpAttributes, LONG_ lInitialCount, LONG_ lMaximumCount)
Chris@101 272 {
Chris@101 273 #ifdef BOOST_NO_ANSI_APIS
Chris@101 274 return CreateSemaphoreW(lpAttributes, lInitialCount, lMaximumCount, 0);
Chris@101 275 #else
Chris@101 276 return CreateSemaphoreA(lpAttributes, lInitialCount, lMaximumCount, 0);
Chris@101 277 #endif
Chris@101 278 }
Chris@101 279
Chris@101 280 BOOST_FORCEINLINE HANDLE_ create_anonymous_event(_SECURITY_ATTRIBUTES* lpAttributes, BOOL_ bManualReset, BOOL_ bInitialState)
Chris@101 281 {
Chris@101 282 #ifdef BOOST_NO_ANSI_APIS
Chris@101 283 return CreateEventW(lpAttributes, bManualReset, bInitialState, 0);
Chris@101 284 #else
Chris@101 285 return CreateEventA(lpAttributes, bManualReset, bInitialState, 0);
Chris@101 286 #endif
Chris@101 287 }
Chris@101 288
Chris@16 289 }
Chris@16 290 }
Chris@16 291 }
Chris@16 292
Chris@16 293 #endif // BOOST_DETAIL_WINAPI_SYNCHRONIZATION_HPP