Fix lwm_win32_cs.hpp for Clang

This commit is contained in:
Peter Dimov
2017-04-16 21:38:29 +03:00
parent acb29ad6f3
commit 3568e093bb

View File

@ -21,7 +21,13 @@
#include <boost/predef.h> #include <boost/predef.h>
#ifdef BOOST_USE_WINDOWS_H #ifdef BOOST_USE_WINDOWS_H
# include <windows.h>
#include <windows.h>
#else
struct _RTL_CRITICAL_SECTION;
#endif #endif
namespace boost namespace boost
@ -47,13 +53,13 @@ struct critical_section
}; };
#if BOOST_PLAT_WINDOWS_RUNTIME #if BOOST_PLAT_WINDOWS_RUNTIME
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(critical_section *, unsigned long, unsigned long); extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(::_RTL_CRITICAL_SECTION *, unsigned long, unsigned long);
#else #else
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *); extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(::_RTL_CRITICAL_SECTION *);
#endif #endif
extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *); extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(::_RTL_CRITICAL_SECTION *);
extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *); extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(::_RTL_CRITICAL_SECTION *);
extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *); extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(::_RTL_CRITICAL_SECTION *);
#else #else
@ -75,15 +81,15 @@ public:
lightweight_mutex() lightweight_mutex()
{ {
#if BOOST_PLAT_WINDOWS_RUNTIME #if BOOST_PLAT_WINDOWS_RUNTIME
InitializeCriticalSectionEx(&cs_, 4000, 0); boost::detail::InitializeCriticalSectionEx(reinterpret_cast< ::_RTL_CRITICAL_SECTION* >(&cs_), 4000, 0);
#else #else
InitializeCriticalSection(&cs_); boost::detail::InitializeCriticalSection(reinterpret_cast< ::_RTL_CRITICAL_SECTION* >(&cs_));
#endif #endif
} }
~lightweight_mutex() ~lightweight_mutex()
{ {
DeleteCriticalSection(&cs_); boost::detail::DeleteCriticalSection(reinterpret_cast< ::_RTL_CRITICAL_SECTION* >(&cs_));
} }
class scoped_lock; class scoped_lock;
@ -102,12 +108,12 @@ public:
explicit scoped_lock(lightweight_mutex & m): m_(m) explicit scoped_lock(lightweight_mutex & m): m_(m)
{ {
EnterCriticalSection(&m_.cs_); boost::detail::EnterCriticalSection(reinterpret_cast< ::_RTL_CRITICAL_SECTION* >(&m_.cs_));
} }
~scoped_lock() ~scoped_lock()
{ {
LeaveCriticalSection(&m_.cs_); boost::detail::LeaveCriticalSection(reinterpret_cast< ::_RTL_CRITICAL_SECTION* >(&m_.cs_));
} }
}; };
}; };