]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/winapi/critical_section.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / winapi / critical_section.hpp
CommitLineData
b32b8144
FG
1/*
2 * Copyright 2010 Vicente J. Botet Escriba
3 * Copyright 2015 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_CRITICAL_SECTION_HPP_INCLUDED_
10#define BOOST_WINAPI_CRITICAL_SECTION_HPP_INCLUDED_
7c673cae 11
b32b8144
FG
12#include <boost/winapi/basic_types.hpp>
13#include <boost/winapi/detail/cast_ptr.hpp>
20effc67 14#include <boost/winapi/detail/header.hpp>
7c673cae
FG
15
16#ifdef BOOST_HAS_PRAGMA_ONCE
17#pragma once
18#endif
19
20#if !defined( BOOST_USE_WINDOWS_H )
21
22extern "C" {
23#if !defined( BOOST_WINAPI_IS_MINGW )
20effc67
TL
24
25// Windows CE uses a different name for the structure
26#if defined (_WIN32_WCE)
27struct CRITICAL_SECTION;
28namespace boost {
29namespace winapi {
30namespace detail {
31 typedef CRITICAL_SECTION winsdk_critical_section;
32}
33}
34}
35#else
7c673cae 36struct _RTL_CRITICAL_SECTION;
20effc67
TL
37namespace boost {
38namespace winapi {
39namespace detail {
40 typedef _RTL_CRITICAL_SECTION winsdk_critical_section;
41}
42}
43}
44#endif
45
46#else
47// MinGW uses a different name for the structure
48struct _CRITICAL_SECTION;
49
50namespace boost {
51namespace winapi {
52namespace detail {
53 typedef _CRITICAL_SECTION winapi_critical_section;
54}
55}
56}
57#endif
58
59#if !defined( BOOST_WINAPI_IS_MINGW )
7c673cae 60
b32b8144 61#if BOOST_WINAPI_PARTITION_APP_SYSTEM
20effc67
TL
62BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
63InitializeCriticalSection(boost::winapi::detail::winsdk_critical_section* lpCriticalSection);
b32b8144 64#endif
7c673cae 65
20effc67
TL
66BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
67EnterCriticalSection(boost::winapi::detail::winsdk_critical_section* lpCriticalSection);
7c673cae 68
20effc67
TL
69BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
70LeaveCriticalSection(boost::winapi::detail::winsdk_critical_section* lpCriticalSection);
7c673cae
FG
71
72#if BOOST_USE_WINAPI_VERSION >= 0x0403
b32b8144 73#if BOOST_WINAPI_PARTITION_APP_SYSTEM
20effc67 74BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
7c673cae 75InitializeCriticalSectionAndSpinCount(
20effc67 76 boost::winapi::detail::winsdk_critical_section* lpCriticalSection,
b32b8144 77 boost::winapi::DWORD_ dwSpinCount);
7c673cae 78
20effc67 79BOOST_WINAPI_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
b32b8144 80SetCriticalSectionSpinCount(
20effc67 81 boost::winapi::detail::winsdk_critical_section* lpCriticalSection,
b32b8144 82 boost::winapi::DWORD_ dwSpinCount);
7c673cae
FG
83#endif
84
b32b8144 85#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
20effc67 86BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
b32b8144 87InitializeCriticalSectionEx(
20effc67 88 boost::winapi::detail::winsdk_critical_section* lpCriticalSection,
b32b8144
FG
89 boost::winapi::DWORD_ dwSpinCount,
90 boost::winapi::DWORD_ Flags);
91#endif
7c673cae
FG
92#endif
93
94#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4
20effc67
TL
95BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
96TryEnterCriticalSection(boost::winapi::detail::winsdk_critical_section* lpCriticalSection);
7c673cae
FG
97#endif
98
20effc67
TL
99BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
100DeleteCriticalSection(boost::winapi::detail::winsdk_critical_section* lpCriticalSection);
7c673cae
FG
101
102#else // defined( BOOST_WINAPI_IS_MINGW )
103
20effc67
TL
104BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
105InitializeCriticalSection(boost::winapi::detail::winapi_critical_section* lpCriticalSection);
7c673cae 106
20effc67
TL
107BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
108EnterCriticalSection(boost::winapi::detail::winapi_critical_section* lpCriticalSection);
7c673cae 109
20effc67
TL
110BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
111LeaveCriticalSection(boost::winapi::detail::winapi_critical_section* lpCriticalSection);
7c673cae
FG
112
113#if BOOST_USE_WINAPI_VERSION >= 0x0403
20effc67 114BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
7c673cae 115InitializeCriticalSectionAndSpinCount(
20effc67 116 boost::winapi::detail::winapi_critical_section* lpCriticalSection,
b32b8144 117 boost::winapi::DWORD_ dwSpinCount);
7c673cae 118
20effc67
TL
119BOOST_WINAPI_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
120SetCriticalSectionSpinCount(
121 boost::winapi::detail::winapi_critical_section* lpCriticalSection,
122 boost::winapi::DWORD_ dwSpinCount);
123#endif
124
7c673cae 125#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
20effc67 126BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
7c673cae 127InitializeCriticalSectionEx(
20effc67 128 boost::winapi::detail::winapi_critical_section* lpCriticalSection,
b32b8144
FG
129 boost::winapi::DWORD_ dwSpinCount,
130 boost::winapi::DWORD_ Flags);
7c673cae
FG
131#endif
132
7c673cae 133#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4
20effc67
TL
134BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
135TryEnterCriticalSection(boost::winapi::detail::winapi_critical_section* lpCriticalSection);
7c673cae
FG
136#endif
137
20effc67
TL
138BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
139DeleteCriticalSection(boost::winapi::detail::winapi_critical_section* lpCriticalSection);
7c673cae
FG
140
141#endif // defined( BOOST_WINAPI_IS_MINGW )
b32b8144 142} // extern "C"
7c673cae
FG
143#endif
144
145namespace boost {
7c673cae
FG
146namespace winapi {
147
7c673cae
FG
148
149#pragma pack(push, 8)
150
20effc67
TL
151#if !defined(_WIN32_WCE)
152
153struct _RTL_CRITICAL_SECTION_DEBUG;
154
b32b8144 155typedef struct BOOST_MAY_ALIAS _RTL_CRITICAL_SECTION {
7c673cae
FG
156 _RTL_CRITICAL_SECTION_DEBUG* DebugInfo;
157 LONG_ LockCount;
158 LONG_ RecursionCount;
159 HANDLE_ OwningThread;
160 HANDLE_ LockSemaphore;
161 ULONG_PTR_ SpinCount;
162} CRITICAL_SECTION_, *PCRITICAL_SECTION_;
163
20effc67
TL
164#else
165
166// Windows CE has different layout
167typedef struct BOOST_MAY_ALIAS CRITICAL_SECTION {
168 unsigned int LockCount;
169 HANDLE OwnerThread;
170 HANDLE hCrit;
171 DWORD needtrap;
172 DWORD dwContentions;
173} CRITICAL_SECTION_, *LPCRITICAL_SECTION_;
174
175#endif
176
7c673cae
FG
177#pragma pack(pop)
178
b32b8144 179#if BOOST_WINAPI_PARTITION_APP_SYSTEM
7c673cae
FG
180BOOST_FORCEINLINE VOID_ InitializeCriticalSection(CRITICAL_SECTION_* lpCriticalSection)
181{
182 ::InitializeCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));
183}
b32b8144 184#endif
7c673cae
FG
185
186BOOST_FORCEINLINE VOID_ EnterCriticalSection(CRITICAL_SECTION_* lpCriticalSection)
187{
188 ::EnterCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));
189}
190
191BOOST_FORCEINLINE VOID_ LeaveCriticalSection(CRITICAL_SECTION_* lpCriticalSection)
192{
193 ::LeaveCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));
194}
195
196#if BOOST_USE_WINAPI_VERSION >= 0x0403
b32b8144 197#if BOOST_WINAPI_PARTITION_APP_SYSTEM
7c673cae
FG
198BOOST_FORCEINLINE BOOL_ InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION_* lpCriticalSection, DWORD_ dwSpinCount)
199{
200 return ::InitializeCriticalSectionAndSpinCount(winapi::detail::cast_ptr(lpCriticalSection), dwSpinCount);
201}
202
b32b8144
FG
203BOOST_FORCEINLINE DWORD_ SetCriticalSectionSpinCount(CRITICAL_SECTION_* lpCriticalSection, DWORD_ dwSpinCount)
204{
205 return ::SetCriticalSectionSpinCount(winapi::detail::cast_ptr(lpCriticalSection), dwSpinCount);
206}
207#endif
208
7c673cae 209// CRITICAL_SECTION_NO_DEBUG_INFO is defined for WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
92f5a8d4
TL
210BOOST_CONSTEXPR_OR_CONST DWORD_ CRITICAL_SECTION_NO_DEBUG_INFO_ = 0x01000000;
211BOOST_CONSTEXPR_OR_CONST DWORD_ CRITICAL_SECTION_FLAG_NO_DEBUG_INFO_ = CRITICAL_SECTION_NO_DEBUG_INFO_;
212BOOST_CONSTEXPR_OR_CONST DWORD_ CRITICAL_SECTION_FLAG_DYNAMIC_SPIN_ = 0x02000000; // undocumented
213BOOST_CONSTEXPR_OR_CONST DWORD_ CRITICAL_SECTION_FLAG_STATIC_INIT_ = 0x04000000; // undocumented
7c673cae
FG
214
215#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
216BOOST_FORCEINLINE BOOL_ InitializeCriticalSectionEx(CRITICAL_SECTION_* lpCriticalSection, DWORD_ dwSpinCount, DWORD_ Flags)
217{
218 return ::InitializeCriticalSectionEx(winapi::detail::cast_ptr(lpCriticalSection), dwSpinCount, Flags);
219}
220#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
7c673cae
FG
221#endif // BOOST_USE_WINAPI_VERSION >= 0x0403
222
223#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4
224BOOST_FORCEINLINE BOOL_ TryEnterCriticalSection(CRITICAL_SECTION_* lpCriticalSection)
225{
226 return ::TryEnterCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));
227}
228#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4
229
230BOOST_FORCEINLINE VOID_ DeleteCriticalSection(CRITICAL_SECTION_* lpCriticalSection)
231{
232 ::DeleteCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));
233}
234
7c673cae
FG
235}
236}
237
20effc67
TL
238#include <boost/winapi/detail/footer.hpp>
239
b32b8144 240#endif // BOOST_WINAPI_CRITICAL_SECTION_HPP_INCLUDED_