epoc32/include/stdapis/boost/detail/interlocked.hpp
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
#ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
williamr@2
     2
#define BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
williamr@2
     3
williamr@2
     4
// MS compatible compilers support #pragma once
williamr@2
     5
williamr@2
     6
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
williamr@2
     7
# pragma once
williamr@2
     8
#endif
williamr@2
     9
williamr@2
    10
//
williamr@2
    11
//  boost/detail/interlocked.hpp
williamr@2
    12
//
williamr@2
    13
//  Copyright 2005 Peter Dimov
williamr@2
    14
//
williamr@2
    15
//  Distributed under the Boost Software License, Version 1.0. (See
williamr@2
    16
//  accompanying file LICENSE_1_0.txt or copy at
williamr@2
    17
//  http://www.boost.org/LICENSE_1_0.txt)
williamr@2
    18
//
williamr@2
    19
williamr@2
    20
#include <boost/config.hpp>
williamr@2
    21
williamr@2
    22
#if defined( BOOST_USE_WINDOWS_H )
williamr@2
    23
williamr@2
    24
# include <windows.h>
williamr@2
    25
williamr@2
    26
# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement
williamr@2
    27
# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement
williamr@2
    28
# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
williamr@2
    29
# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange
williamr@2
    30
# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
williamr@2
    31
# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER InterlockedCompareExchangePointer
williamr@2
    32
# define BOOST_INTERLOCKED_EXCHANGE_POINTER InterlockedExchangePointer
williamr@2
    33
williamr@2
    34
#elif defined(_WIN32_WCE)
williamr@2
    35
williamr@2
    36
// under Windows CE we still have old-style Interlocked* functions
williamr@2
    37
williamr@2
    38
extern "C" long __cdecl InterlockedIncrement( long* );
williamr@2
    39
extern "C" long __cdecl InterlockedDecrement( long* );
williamr@2
    40
extern "C" long __cdecl InterlockedCompareExchange( long*, long, long );
williamr@2
    41
extern "C" long __cdecl InterlockedExchange( long*, long );
williamr@2
    42
extern "C" long __cdecl InterlockedExchangeAdd( long*, long );
williamr@2
    43
williamr@2
    44
# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement
williamr@2
    45
# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement
williamr@2
    46
# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
williamr@2
    47
# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange
williamr@2
    48
# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
williamr@2
    49
williamr@2
    50
#elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN )
williamr@2
    51
williamr@2
    52
extern "C" long __cdecl _InterlockedIncrement( long volatile * );
williamr@2
    53
extern "C" long __cdecl _InterlockedDecrement( long volatile * );
williamr@2
    54
extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long );
williamr@2
    55
extern "C" long __cdecl _InterlockedExchange( long volatile *, long);
williamr@2
    56
extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long);
williamr@2
    57
williamr@2
    58
# pragma intrinsic( _InterlockedIncrement )
williamr@2
    59
# pragma intrinsic( _InterlockedDecrement )
williamr@2
    60
# pragma intrinsic( _InterlockedCompareExchange )
williamr@2
    61
# pragma intrinsic( _InterlockedExchange )
williamr@2
    62
# pragma intrinsic( _InterlockedExchangeAdd )
williamr@2
    63
williamr@2
    64
# if defined(_M_IA64) || defined(_M_AMD64)
williamr@2
    65
williamr@2
    66
extern "C" void* __cdecl _InterlockedCompareExchangePointer( void* volatile *, void*, void* );
williamr@2
    67
extern "C" void* __cdecl _InterlockedExchangePointer( void* volatile *, void* );
williamr@2
    68
williamr@2
    69
#  pragma intrinsic( _InterlockedCompareExchangePointer )
williamr@2
    70
#  pragma intrinsic( _InterlockedExchangePointer )
williamr@2
    71
williamr@2
    72
#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
williamr@2
    73
#  define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
williamr@2
    74
williamr@2
    75
# else
williamr@2
    76
williamr@2
    77
#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
williamr@2
    78
    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
williamr@2
    79
#  define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
williamr@2
    80
    ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
williamr@2
    81
williamr@2
    82
# endif
williamr@2
    83
williamr@2
    84
# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
williamr@2
    85
# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
williamr@2
    86
# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
williamr@2
    87
# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
williamr@2
    88
# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
williamr@2
    89
williamr@2
    90
#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ )
williamr@2
    91
williamr@2
    92
namespace boost
williamr@2
    93
{
williamr@2
    94
williamr@2
    95
namespace detail
williamr@2
    96
{
williamr@2
    97
williamr@2
    98
extern "C" __declspec(dllimport) long __stdcall InterlockedIncrement( long volatile * );
williamr@2
    99
extern "C" __declspec(dllimport) long __stdcall InterlockedDecrement( long volatile * );
williamr@2
   100
extern "C" __declspec(dllimport) long __stdcall InterlockedCompareExchange( long volatile *, long, long );
williamr@2
   101
extern "C" __declspec(dllimport) long __stdcall InterlockedExchange( long volatile *, long );
williamr@2
   102
extern "C" __declspec(dllimport) long __stdcall InterlockedExchangeAdd( long volatile *, long );
williamr@2
   103
williamr@2
   104
} // namespace detail
williamr@2
   105
williamr@2
   106
} // namespace boost
williamr@2
   107
williamr@2
   108
# define BOOST_INTERLOCKED_INCREMENT ::boost::detail::InterlockedIncrement
williamr@2
   109
# define BOOST_INTERLOCKED_DECREMENT ::boost::detail::InterlockedDecrement
williamr@2
   110
# define BOOST_INTERLOCKED_COMPARE_EXCHANGE ::boost::detail::InterlockedCompareExchange
williamr@2
   111
# define BOOST_INTERLOCKED_EXCHANGE ::boost::detail::InterlockedExchange
williamr@2
   112
# define BOOST_INTERLOCKED_EXCHANGE_ADD ::boost::detail::InterlockedExchangeAdd
williamr@2
   113
williamr@2
   114
# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
williamr@2
   115
    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
williamr@2
   116
# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
williamr@2
   117
    ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
williamr@2
   118
williamr@2
   119
#else
williamr@2
   120
williamr@2
   121
# error "Interlocked intrinsics not available"
williamr@2
   122
williamr@2
   123
#endif
williamr@2
   124
williamr@2
   125
#endif // #ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED