epoc32/include/stdapis/boost/detail/interlocked.hpp
branchSymbian2
changeset 2 2fe1408b6811
     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