1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/stdapis/boost/detail/interlocked.hpp Tue Mar 16 16:12:26 2010 +0000
1.3 @@ -0,0 +1,125 @@
1.4 +#ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
1.5 +#define BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
1.6 +
1.7 +// MS compatible compilers support #pragma once
1.8 +
1.9 +#if defined(_MSC_VER) && (_MSC_VER >= 1020)
1.10 +# pragma once
1.11 +#endif
1.12 +
1.13 +//
1.14 +// boost/detail/interlocked.hpp
1.15 +//
1.16 +// Copyright 2005 Peter Dimov
1.17 +//
1.18 +// Distributed under the Boost Software License, Version 1.0. (See
1.19 +// accompanying file LICENSE_1_0.txt or copy at
1.20 +// http://www.boost.org/LICENSE_1_0.txt)
1.21 +//
1.22 +
1.23 +#include <boost/config.hpp>
1.24 +
1.25 +#if defined( BOOST_USE_WINDOWS_H )
1.26 +
1.27 +# include <windows.h>
1.28 +
1.29 +# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement
1.30 +# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement
1.31 +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
1.32 +# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange
1.33 +# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
1.34 +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER InterlockedCompareExchangePointer
1.35 +# define BOOST_INTERLOCKED_EXCHANGE_POINTER InterlockedExchangePointer
1.36 +
1.37 +#elif defined(_WIN32_WCE)
1.38 +
1.39 +// under Windows CE we still have old-style Interlocked* functions
1.40 +
1.41 +extern "C" long __cdecl InterlockedIncrement( long* );
1.42 +extern "C" long __cdecl InterlockedDecrement( long* );
1.43 +extern "C" long __cdecl InterlockedCompareExchange( long*, long, long );
1.44 +extern "C" long __cdecl InterlockedExchange( long*, long );
1.45 +extern "C" long __cdecl InterlockedExchangeAdd( long*, long );
1.46 +
1.47 +# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement
1.48 +# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement
1.49 +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
1.50 +# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange
1.51 +# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
1.52 +
1.53 +#elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN )
1.54 +
1.55 +extern "C" long __cdecl _InterlockedIncrement( long volatile * );
1.56 +extern "C" long __cdecl _InterlockedDecrement( long volatile * );
1.57 +extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long );
1.58 +extern "C" long __cdecl _InterlockedExchange( long volatile *, long);
1.59 +extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long);
1.60 +
1.61 +# pragma intrinsic( _InterlockedIncrement )
1.62 +# pragma intrinsic( _InterlockedDecrement )
1.63 +# pragma intrinsic( _InterlockedCompareExchange )
1.64 +# pragma intrinsic( _InterlockedExchange )
1.65 +# pragma intrinsic( _InterlockedExchangeAdd )
1.66 +
1.67 +# if defined(_M_IA64) || defined(_M_AMD64)
1.68 +
1.69 +extern "C" void* __cdecl _InterlockedCompareExchangePointer( void* volatile *, void*, void* );
1.70 +extern "C" void* __cdecl _InterlockedExchangePointer( void* volatile *, void* );
1.71 +
1.72 +# pragma intrinsic( _InterlockedCompareExchangePointer )
1.73 +# pragma intrinsic( _InterlockedExchangePointer )
1.74 +
1.75 +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
1.76 +# define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
1.77 +
1.78 +# else
1.79 +
1.80 +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
1.81 + ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
1.82 +# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
1.83 + ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
1.84 +
1.85 +# endif
1.86 +
1.87 +# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
1.88 +# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
1.89 +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
1.90 +# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
1.91 +# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
1.92 +
1.93 +#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ )
1.94 +
1.95 +namespace boost
1.96 +{
1.97 +
1.98 +namespace detail
1.99 +{
1.100 +
1.101 +extern "C" __declspec(dllimport) long __stdcall InterlockedIncrement( long volatile * );
1.102 +extern "C" __declspec(dllimport) long __stdcall InterlockedDecrement( long volatile * );
1.103 +extern "C" __declspec(dllimport) long __stdcall InterlockedCompareExchange( long volatile *, long, long );
1.104 +extern "C" __declspec(dllimport) long __stdcall InterlockedExchange( long volatile *, long );
1.105 +extern "C" __declspec(dllimport) long __stdcall InterlockedExchangeAdd( long volatile *, long );
1.106 +
1.107 +} // namespace detail
1.108 +
1.109 +} // namespace boost
1.110 +
1.111 +# define BOOST_INTERLOCKED_INCREMENT ::boost::detail::InterlockedIncrement
1.112 +# define BOOST_INTERLOCKED_DECREMENT ::boost::detail::InterlockedDecrement
1.113 +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE ::boost::detail::InterlockedCompareExchange
1.114 +# define BOOST_INTERLOCKED_EXCHANGE ::boost::detail::InterlockedExchange
1.115 +# define BOOST_INTERLOCKED_EXCHANGE_ADD ::boost::detail::InterlockedExchangeAdd
1.116 +
1.117 +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
1.118 + ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
1.119 +# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
1.120 + ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
1.121 +
1.122 +#else
1.123 +
1.124 +# error "Interlocked intrinsics not available"
1.125 +
1.126 +#endif
1.127 +
1.128 +#endif // #ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED