]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/winapi/condition_variable.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / winapi / condition_variable.hpp
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 */
8
9 #ifndef BOOST_WINAPI_CONDITION_VARIABLE_HPP_INCLUDED_
10 #define BOOST_WINAPI_CONDITION_VARIABLE_HPP_INCLUDED_
11
12 #include <boost/winapi/config.hpp>
13
14 #ifdef BOOST_HAS_PRAGMA_ONCE
15 #pragma once
16 #endif
17
18 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
19
20 #include <boost/winapi/basic_types.hpp>
21
22 #if !defined( BOOST_USE_WINDOWS_H )
23 extern "C" {
24 struct _RTL_CONDITION_VARIABLE;
25 struct _RTL_CRITICAL_SECTION;
26 struct _RTL_SRWLOCK;
27
28 BOOST_SYMBOL_IMPORT boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
29 InitializeConditionVariable(::_RTL_CONDITION_VARIABLE* ConditionVariable);
30
31 BOOST_SYMBOL_IMPORT boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
32 WakeConditionVariable(::_RTL_CONDITION_VARIABLE* ConditionVariable);
33
34 BOOST_SYMBOL_IMPORT boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
35 WakeAllConditionVariable(::_RTL_CONDITION_VARIABLE* ConditionVariable);
36
37 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
38 SleepConditionVariableCS(
39 ::_RTL_CONDITION_VARIABLE* ConditionVariable,
40 ::_RTL_CRITICAL_SECTION* CriticalSection,
41 boost::winapi::DWORD_ dwMilliseconds);
42
43 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
44 SleepConditionVariableSRW(
45 ::_RTL_CONDITION_VARIABLE* ConditionVariable,
46 ::_RTL_SRWLOCK* SRWLock,
47 boost::winapi::DWORD_ dwMilliseconds,
48 boost::winapi::ULONG_ Flags);
49 }
50 #endif
51
52 namespace boost {
53 namespace winapi {
54
55 typedef struct BOOST_MAY_ALIAS _RTL_CONDITION_VARIABLE {
56 PVOID_ Ptr;
57 } CONDITION_VARIABLE_, *PCONDITION_VARIABLE_;
58
59 #if defined( BOOST_USE_WINDOWS_H )
60 #define BOOST_WINAPI_CONDITION_VARIABLE_INIT CONDITION_VARIABLE_INIT
61 #else
62 #define BOOST_WINAPI_CONDITION_VARIABLE_INIT {0}
63 #endif
64
65 struct _RTL_CRITICAL_SECTION;
66 struct _RTL_SRWLOCK;
67
68 BOOST_FORCEINLINE VOID_ InitializeConditionVariable(PCONDITION_VARIABLE_ ConditionVariable)
69 {
70 ::InitializeConditionVariable(reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable));
71 }
72
73 BOOST_FORCEINLINE VOID_ WakeConditionVariable(PCONDITION_VARIABLE_ ConditionVariable)
74 {
75 ::WakeConditionVariable(reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable));
76 }
77
78 BOOST_FORCEINLINE VOID_ WakeAllConditionVariable(PCONDITION_VARIABLE_ ConditionVariable)
79 {
80 ::WakeAllConditionVariable(reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable));
81 }
82
83 BOOST_FORCEINLINE BOOL_ SleepConditionVariableCS(
84 PCONDITION_VARIABLE_ ConditionVariable,
85 _RTL_CRITICAL_SECTION* CriticalSection,
86 DWORD_ dwMilliseconds)
87 {
88 return ::SleepConditionVariableCS(
89 reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable),
90 reinterpret_cast< ::_RTL_CRITICAL_SECTION* >(CriticalSection),
91 dwMilliseconds);
92 }
93
94 BOOST_FORCEINLINE BOOL_ SleepConditionVariableSRW(
95 PCONDITION_VARIABLE_ ConditionVariable,
96 _RTL_SRWLOCK* SRWLock,
97 DWORD_ dwMilliseconds,
98 ULONG_ Flags)
99 {
100 return ::SleepConditionVariableSRW(
101 reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable),
102 reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock),
103 dwMilliseconds,
104 Flags);
105 }
106
107 #if defined( BOOST_USE_WINDOWS_H )
108 BOOST_CONSTEXPR_OR_CONST ULONG_ CONDITION_VARIABLE_LOCKMODE_SHARED_ = CONDITION_VARIABLE_LOCKMODE_SHARED;
109 #else // defined( BOOST_USE_WINDOWS_H )
110 BOOST_CONSTEXPR_OR_CONST ULONG_ CONDITION_VARIABLE_LOCKMODE_SHARED_ = 0x00000001;
111 #endif // defined( BOOST_USE_WINDOWS_H )
112
113 BOOST_CONSTEXPR_OR_CONST ULONG_ condition_variable_lockmode_shared = CONDITION_VARIABLE_LOCKMODE_SHARED_;
114
115 }
116 }
117
118 #endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
119
120 #endif // BOOST_WINAPI_CONDITION_VARIABLE_HPP_INCLUDED_