1//
2// detail/fenced_block.hpp
3// ~~~~~~~~~~~~~~~~~~~~~~~
4//
5// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6//
7// Distributed under the Boost Software License, Version 1.0. (See accompanying
8// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9//
10
11#ifndef ASIO_DETAIL_FENCED_BLOCK_HPP
12#define ASIO_DETAIL_FENCED_BLOCK_HPP
13
14
15#include "asio/detail/config.hpp"
16
17#if !defined(ASIO_HAS_THREADS)    || defined(ASIO_DISABLE_FENCED_BLOCK)
18# include "asio/detail/null_fenced_block.hpp"
19#elif defined(__MACH__) && defined(__APPLE__)
20# include "asio/detail/macos_fenced_block.hpp"
21#elif defined(__sun)
22# include "asio/detail/solaris_fenced_block.hpp"
23#elif defined(__GNUC__) && defined(__arm__)    && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
24# include "asio/detail/gcc_arm_fenced_block.hpp"
25#elif defined(__GNUC__) && (defined(__hppa) || defined(__hppa__))
26# include "asio/detail/gcc_hppa_fenced_block.hpp"
27#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
28# include "asio/detail/gcc_x86_fenced_block.hpp"
29#elif defined(__GNUC__)    && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4))    && !defined(__INTEL_COMPILER) && !defined(__ICL)    && !defined(__ICC) && !defined(__ECC) && !defined(__PATHSCALE__)
30# include "asio/detail/gcc_sync_fenced_block.hpp"
31#else
32# include "asio/detail/null_fenced_block.hpp"
33#endif
34
35namespace asio {
36namespace detail {
37
38#if !defined(ASIO_HAS_THREADS)    || defined(ASIO_DISABLE_FENCED_BLOCK)
39typedef null_fenced_block fenced_block;
40#elif defined(__MACH__) && defined(__APPLE__)
41typedef macos_fenced_block fenced_block;
42#elif defined(__sun)
43typedef solaris_fenced_block fenced_block;
44#elif defined(__GNUC__) && defined(__arm__)    && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
45typedef gcc_arm_fenced_block fenced_block;
46#elif defined(__GNUC__) && (defined(__hppa) || defined(__hppa__))
47typedef gcc_hppa_fenced_block fenced_block;
48#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
49typedef gcc_x86_fenced_block fenced_block;
50#elif defined(__GNUC__)    && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4))    && !defined(__INTEL_COMPILER) && !defined(__ICL)    && !defined(__ICC) && !defined(__ECC) && !defined(__PATHSCALE__)
51typedef gcc_sync_fenced_block fenced_block;
52#else
53typedef null_fenced_block fenced_block;
54#endif
55
56} // namespace detail
57} // namespace asio
58
59#endif // ASIO_DETAIL_FENCED_BLOCK_HPP
60