]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/winapi/include/boost/detail/winapi/critical_section.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / winapi / include / boost / detail / winapi / critical_section.hpp
CommitLineData
7c673cae
FG
1// critical_section.hpp --------------------------------------------------------------//
2
3// Copyright 2010 Vicente J. Botet Escriba
4// Copyright 2015 Andrey Semashev
5
6// Distributed under the Boost Software License, Version 1.0.
7// See http://www.boost.org/LICENSE_1_0.txt
8
9
10#ifndef BOOST_DETAIL_WINAPI_CRITICAL_SECTION_HPP
11#define BOOST_DETAIL_WINAPI_CRITICAL_SECTION_HPP
12
13#include <boost/detail/winapi/basic_types.hpp>
14#include <boost/detail/winapi/detail/cast_ptr.hpp>
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 )
24struct _RTL_CRITICAL_SECTION;
25
26BOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI
27InitializeCriticalSection(::_RTL_CRITICAL_SECTION* lpCriticalSection);
28
29BOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI
30EnterCriticalSection(::_RTL_CRITICAL_SECTION* lpCriticalSection);
31
32BOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI
33LeaveCriticalSection(::_RTL_CRITICAL_SECTION* lpCriticalSection);
34
35#if BOOST_USE_WINAPI_VERSION >= 0x0403
36BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI
37InitializeCriticalSectionAndSpinCount(
38 ::_RTL_CRITICAL_SECTION* lpCriticalSection,
39 boost::detail::winapi::DWORD_ dwSpinCount);
40
41#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
42BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI
43InitializeCriticalSectionEx(
44 ::_RTL_CRITICAL_SECTION* lpCriticalSection,
45 boost::detail::winapi::DWORD_ dwSpinCount,
46 boost::detail::winapi::DWORD_ Flags);
47#endif
48
49BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI
50SetCriticalSectionSpinCount(
51 ::_RTL_CRITICAL_SECTION* lpCriticalSection,
52 boost::detail::winapi::DWORD_ dwSpinCount);
53#endif
54
55#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4
56BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI
57TryEnterCriticalSection(::_RTL_CRITICAL_SECTION* lpCriticalSection);
58#endif
59
60BOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI
61DeleteCriticalSection(::_RTL_CRITICAL_SECTION* lpCriticalSection);
62
63#else // defined( BOOST_WINAPI_IS_MINGW )
64
65// MinGW uses a different name for the structure
66struct _CRITICAL_SECTION;
67
68BOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI
69InitializeCriticalSection(::_CRITICAL_SECTION* lpCriticalSection);
70
71BOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI
72EnterCriticalSection(::_CRITICAL_SECTION* lpCriticalSection);
73
74BOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI
75LeaveCriticalSection(::_CRITICAL_SECTION* lpCriticalSection);
76
77#if BOOST_USE_WINAPI_VERSION >= 0x0403
78BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI
79InitializeCriticalSectionAndSpinCount(
80 ::_CRITICAL_SECTION* lpCriticalSection,
81 boost::detail::winapi::DWORD_ dwSpinCount);
82
83#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
84BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI
85InitializeCriticalSectionEx(
86 ::_CRITICAL_SECTION* lpCriticalSection,
87 boost::detail::winapi::DWORD_ dwSpinCount,
88 boost::detail::winapi::DWORD_ Flags);
89#endif
90
91BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI
92SetCriticalSectionSpinCount(
93 ::_CRITICAL_SECTION* lpCriticalSection,
94 boost::detail::winapi::DWORD_ dwSpinCount);
95#endif
96
97#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4
98BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI
99TryEnterCriticalSection(::_CRITICAL_SECTION* lpCriticalSection);
100#endif
101
102BOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI
103DeleteCriticalSection(::_CRITICAL_SECTION* lpCriticalSection);
104
105#endif // defined( BOOST_WINAPI_IS_MINGW )
106}
107#endif
108
109namespace boost {
110namespace detail {
111namespace winapi {
112
113struct _RTL_CRITICAL_SECTION_DEBUG;
114
115#pragma pack(push, 8)
116
117typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _RTL_CRITICAL_SECTION {
118 _RTL_CRITICAL_SECTION_DEBUG* DebugInfo;
119 LONG_ LockCount;
120 LONG_ RecursionCount;
121 HANDLE_ OwningThread;
122 HANDLE_ LockSemaphore;
123 ULONG_PTR_ SpinCount;
124} CRITICAL_SECTION_, *PCRITICAL_SECTION_;
125
126#pragma pack(pop)
127
128BOOST_FORCEINLINE VOID_ InitializeCriticalSection(CRITICAL_SECTION_* lpCriticalSection)
129{
130 ::InitializeCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));
131}
132
133BOOST_FORCEINLINE VOID_ EnterCriticalSection(CRITICAL_SECTION_* lpCriticalSection)
134{
135 ::EnterCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));
136}
137
138BOOST_FORCEINLINE VOID_ LeaveCriticalSection(CRITICAL_SECTION_* lpCriticalSection)
139{
140 ::LeaveCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));
141}
142
143#if BOOST_USE_WINAPI_VERSION >= 0x0403
144BOOST_FORCEINLINE BOOL_ InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION_* lpCriticalSection, DWORD_ dwSpinCount)
145{
146 return ::InitializeCriticalSectionAndSpinCount(winapi::detail::cast_ptr(lpCriticalSection), dwSpinCount);
147}
148
149// CRITICAL_SECTION_NO_DEBUG_INFO is defined for WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
150const DWORD_ CRITICAL_SECTION_NO_DEBUG_INFO_ = 0x01000000;
151const DWORD_ CRITICAL_SECTION_FLAG_NO_DEBUG_INFO_ = CRITICAL_SECTION_NO_DEBUG_INFO_;
152const DWORD_ CRITICAL_SECTION_FLAG_DYNAMIC_SPIN_ = 0x02000000; // undocumented
153const DWORD_ CRITICAL_SECTION_FLAG_STATIC_INIT_ = 0x04000000; // undocumented
154
155#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
156BOOST_FORCEINLINE BOOL_ InitializeCriticalSectionEx(CRITICAL_SECTION_* lpCriticalSection, DWORD_ dwSpinCount, DWORD_ Flags)
157{
158 return ::InitializeCriticalSectionEx(winapi::detail::cast_ptr(lpCriticalSection), dwSpinCount, Flags);
159}
160#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
161
162BOOST_FORCEINLINE DWORD_ SetCriticalSectionSpinCount(CRITICAL_SECTION_* lpCriticalSection, DWORD_ dwSpinCount)
163{
164 return ::SetCriticalSectionSpinCount(winapi::detail::cast_ptr(lpCriticalSection), dwSpinCount);
165}
166#endif // BOOST_USE_WINAPI_VERSION >= 0x0403
167
168#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4
169BOOST_FORCEINLINE BOOL_ TryEnterCriticalSection(CRITICAL_SECTION_* lpCriticalSection)
170{
171 return ::TryEnterCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));
172}
173#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_NT4
174
175BOOST_FORCEINLINE VOID_ DeleteCriticalSection(CRITICAL_SECTION_* lpCriticalSection)
176{
177 ::DeleteCriticalSection(winapi::detail::cast_ptr(lpCriticalSection));
178}
179
180}
181}
182}
183
184#endif // BOOST_DETAIL_WINAPI_CRITICAL_SECTION_HPP