]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/winapi/mutex.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / winapi / mutex.hpp
CommitLineData
b32b8144
FG
1/*
2 * Copyright 2010 Vicente J. Botet Escriba
3 * Copyright 2015, 2017 Andrey Semashev
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * See http://www.boost.org/LICENSE_1_0.txt
7 */
7c673cae 8
b32b8144
FG
9#ifndef BOOST_WINAPI_MUTEX_HPP_INCLUDED_
10#define BOOST_WINAPI_MUTEX_HPP_INCLUDED_
7c673cae 11
b32b8144 12#include <boost/winapi/basic_types.hpp>
20effc67 13#include <boost/winapi/detail/header.hpp>
7c673cae
FG
14
15#ifdef BOOST_HAS_PRAGMA_ONCE
16#pragma once
17#endif
18
b32b8144 19#if !defined( BOOST_USE_WINDOWS_H ) && BOOST_WINAPI_PARTITION_APP_SYSTEM
7c673cae
FG
20extern "C" {
21#if !defined( BOOST_NO_ANSI_APIS )
20effc67 22BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
7c673cae
FG
23CreateMutexA(
24 ::_SECURITY_ATTRIBUTES* lpMutexAttributes,
b32b8144
FG
25 boost::winapi::BOOL_ bInitialOwner,
26 boost::winapi::LPCSTR_ lpName);
7c673cae
FG
27#endif
28
20effc67 29BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
30CreateMutexW(
31 ::_SECURITY_ATTRIBUTES* lpMutexAttributes,
32 boost::winapi::BOOL_ bInitialOwner,
33 boost::winapi::LPCWSTR_ lpName);
34} // extern "C"
35#endif // !defined( BOOST_USE_WINDOWS_H ) && BOOST_WINAPI_PARTITION_APP_SYSTEM
36
37#if !defined( BOOST_USE_WINDOWS_H )
38extern "C" {
39#if !defined( BOOST_NO_ANSI_APIS )
7c673cae 40#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
20effc67 41BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
7c673cae
FG
42CreateMutexExA(
43 ::_SECURITY_ATTRIBUTES* lpMutexAttributes,
b32b8144
FG
44 boost::winapi::LPCSTR_ lpName,
45 boost::winapi::DWORD_ dwFlags,
46 boost::winapi::DWORD_ dwDesiredAccess);
7c673cae
FG
47#endif
48
20effc67 49BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
7c673cae 50OpenMutexA(
b32b8144
FG
51 boost::winapi::DWORD_ dwDesiredAccess,
52 boost::winapi::BOOL_ bInheritHandle,
53 boost::winapi::LPCSTR_ lpName);
54#endif // !defined( BOOST_NO_ANSI_APIS )
7c673cae
FG
55
56#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
20effc67 57BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
7c673cae
FG
58CreateMutexExW(
59 ::_SECURITY_ATTRIBUTES* lpMutexAttributes,
b32b8144
FG
60 boost::winapi::LPCWSTR_ lpName,
61 boost::winapi::DWORD_ dwFlags,
62 boost::winapi::DWORD_ dwDesiredAccess);
7c673cae
FG
63#endif
64
20effc67 65BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
7c673cae 66OpenMutexW(
b32b8144
FG
67 boost::winapi::DWORD_ dwDesiredAccess,
68 boost::winapi::BOOL_ bInheritHandle,
69 boost::winapi::LPCWSTR_ lpName);
7c673cae 70
20effc67 71BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144
FG
72ReleaseMutex(boost::winapi::HANDLE_ hMutex);
73} // extern "C"
7c673cae
FG
74#endif
75
76namespace boost {
7c673cae
FG
77namespace winapi {
78
79#if !defined( BOOST_NO_ANSI_APIS )
80using ::OpenMutexA;
81#endif
82using ::OpenMutexW;
83using ::ReleaseMutex;
84
85#if defined( BOOST_USE_WINDOWS_H )
86
92f5a8d4
TL
87BOOST_CONSTEXPR_OR_CONST DWORD_ MUTEX_ALL_ACCESS_ = MUTEX_ALL_ACCESS;
88BOOST_CONSTEXPR_OR_CONST DWORD_ MUTEX_MODIFY_STATE_ = MUTEX_MODIFY_STATE;
7c673cae 89#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
92f5a8d4 90BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_MUTEX_INITIAL_OWNER_ = CREATE_MUTEX_INITIAL_OWNER;
7c673cae
FG
91#endif
92
93#else // defined( BOOST_USE_WINDOWS_H )
94
92f5a8d4
TL
95BOOST_CONSTEXPR_OR_CONST DWORD_ MUTEX_ALL_ACCESS_ = 0x001F0001;
96BOOST_CONSTEXPR_OR_CONST DWORD_ MUTEX_MODIFY_STATE_ = 0x00000001;
7c673cae 97#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
92f5a8d4 98BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_MUTEX_INITIAL_OWNER_ = 0x00000001;
7c673cae
FG
99#endif
100
101#endif // defined( BOOST_USE_WINDOWS_H )
102
92f5a8d4
TL
103BOOST_CONSTEXPR_OR_CONST DWORD_ mutex_all_access = MUTEX_ALL_ACCESS_;
104BOOST_CONSTEXPR_OR_CONST DWORD_ mutex_modify_state = MUTEX_MODIFY_STATE_;
7c673cae 105#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
92f5a8d4 106BOOST_CONSTEXPR_OR_CONST DWORD_ create_mutex_initial_owner = CREATE_MUTEX_INITIAL_OWNER_;
7c673cae
FG
107#endif
108
109#if !defined( BOOST_NO_ANSI_APIS )
110BOOST_FORCEINLINE HANDLE_ CreateMutexA(SECURITY_ATTRIBUTES_* lpMutexAttributes, BOOL_ bInitialOwner, LPCSTR_ lpName)
111{
b32b8144 112#if !BOOST_WINAPI_PARTITION_APP_SYSTEM && BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
7c673cae
FG
113 const DWORD_ flags = bInitialOwner ? create_mutex_initial_owner : 0u;
114 return ::CreateMutexExA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), lpName, flags, mutex_all_access);
115#else
116 return ::CreateMutexA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), bInitialOwner, lpName);
117#endif
118}
119
120#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
121BOOST_FORCEINLINE HANDLE_ CreateMutexExA(
122 SECURITY_ATTRIBUTES_* lpMutexAttributes,
123 LPCSTR_ lpName,
124 DWORD_ dwFlags,
125 DWORD_ dwDesiredAccess)
126{
127 return ::CreateMutexExA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), lpName, dwFlags, dwDesiredAccess);
128}
129#endif
130#endif
131
132BOOST_FORCEINLINE HANDLE_ CreateMutexW(SECURITY_ATTRIBUTES_* lpMutexAttributes, BOOL_ bInitialOwner, LPCWSTR_ lpName)
133{
b32b8144 134#if !BOOST_WINAPI_PARTITION_APP_SYSTEM && BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
7c673cae
FG
135 const DWORD_ flags = bInitialOwner ? create_mutex_initial_owner : 0u;
136 return ::CreateMutexExW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), lpName, flags, mutex_all_access);
137#else
138 return ::CreateMutexW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), bInitialOwner, lpName);
139#endif
140}
141
142#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
143BOOST_FORCEINLINE HANDLE_ CreateMutexExW(
144 SECURITY_ATTRIBUTES_* lpMutexAttributes,
145 LPCWSTR_ lpName,
146 DWORD_ dwFlags,
147 DWORD_ dwDesiredAccess)
148{
149 return ::CreateMutexExW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpMutexAttributes), lpName, dwFlags, dwDesiredAccess);
150}
151#endif
152
153#if !defined( BOOST_NO_ANSI_APIS )
154BOOST_FORCEINLINE HANDLE_ create_mutex(SECURITY_ATTRIBUTES_* lpAttributes, BOOL_ bInitialOwner, LPCSTR_ lpName)
155{
156 return winapi::CreateMutexA(lpAttributes, bInitialOwner, lpName);
157}
158
159BOOST_FORCEINLINE HANDLE_ open_mutex(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName)
160{
161 return ::OpenMutexA(dwDesiredAccess, bInheritHandle, lpName);
162}
163#endif
164
165BOOST_FORCEINLINE HANDLE_ create_mutex(SECURITY_ATTRIBUTES_* lpAttributes, BOOL_ bInitialOwner, LPCWSTR_ lpName)
166{
167 return winapi::CreateMutexW(lpAttributes, bInitialOwner, lpName);
168}
169
170BOOST_FORCEINLINE HANDLE_ open_mutex(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName)
171{
172 return ::OpenMutexW(dwDesiredAccess, bInheritHandle, lpName);
173}
174
175BOOST_FORCEINLINE HANDLE_ create_anonymous_mutex(SECURITY_ATTRIBUTES_* lpAttributes, BOOL_ bInitialOwner)
176{
177 return winapi::CreateMutexW(lpAttributes, bInitialOwner, 0);
178}
179
7c673cae
FG
180}
181}
182
20effc67
TL
183#include <boost/winapi/detail/footer.hpp>
184
b32b8144 185#endif // BOOST_WINAPI_MUTEX_HPP_INCLUDED_