| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 | /* * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * Copyright (c) 2014 Andrey Semashev *//*! * \file   atomic/capabilities.hpp * * This header defines feature capabilities macros. */#ifndef BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_#define BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_#include <boost/atomic/detail/config.hpp>#include <boost/atomic/detail/platform.hpp>#include <boost/atomic/detail/int_sizes.hpp>#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT)#include <boost/atomic/detail/float_sizes.hpp>#endif#if !defined(BOOST_ATOMIC_EMULATED)#include BOOST_ATOMIC_DETAIL_BACKEND_HEADER(boost/atomic/detail/caps_)#endif#ifdef BOOST_HAS_PRAGMA_ONCE#pragma once#endif#ifndef BOOST_ATOMIC_INT8_LOCK_FREE#define BOOST_ATOMIC_INT8_LOCK_FREE 0#endif#ifndef BOOST_ATOMIC_INT16_LOCK_FREE#define BOOST_ATOMIC_INT16_LOCK_FREE 0#endif#ifndef BOOST_ATOMIC_INT32_LOCK_FREE#define BOOST_ATOMIC_INT32_LOCK_FREE 0#endif#ifndef BOOST_ATOMIC_INT64_LOCK_FREE#define BOOST_ATOMIC_INT64_LOCK_FREE 0#endif#ifndef BOOST_ATOMIC_INT128_LOCK_FREE#define BOOST_ATOMIC_INT128_LOCK_FREE 0#endif#ifndef BOOST_ATOMIC_CHAR_LOCK_FREE#define BOOST_ATOMIC_CHAR_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE#endif#ifndef BOOST_ATOMIC_CHAR16_T_LOCK_FREE#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE#endif#ifndef BOOST_ATOMIC_CHAR32_T_LOCK_FREE#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE#endif#ifndef BOOST_ATOMIC_WCHAR_T_LOCK_FREE#if BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 1#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 2#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 4#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 8#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE#else#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 0#endif#endif#ifndef BOOST_ATOMIC_SHORT_LOCK_FREE#if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 1#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 2#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 4#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 8#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE#else#define BOOST_ATOMIC_SHORT_LOCK_FREE 0#endif#endif#ifndef BOOST_ATOMIC_INT_LOCK_FREE#if BOOST_ATOMIC_DETAIL_SIZEOF_INT == 1#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 2#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 4#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 8#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE#else#define BOOST_ATOMIC_INT_LOCK_FREE 0#endif#endif#ifndef BOOST_ATOMIC_LONG_LOCK_FREE#if BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 1#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 2#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 4#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 8#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE#else#define BOOST_ATOMIC_LONG_LOCK_FREE 0#endif#endif#ifndef BOOST_ATOMIC_LLONG_LOCK_FREE#if BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 1#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 2#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 4#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 8#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE#else#define BOOST_ATOMIC_LLONG_LOCK_FREE 0#endif#endif#ifndef BOOST_ATOMIC_POINTER_LOCK_FREE#if (BOOST_ATOMIC_DETAIL_SIZEOF_POINTER + 0) == 8#define BOOST_ATOMIC_POINTER_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE#elif (BOOST_ATOMIC_DETAIL_SIZEOF_POINTER + 0) == 4#define BOOST_ATOMIC_POINTER_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE#else#define BOOST_ATOMIC_POINTER_LOCK_FREE 0#endif#endif#define BOOST_ATOMIC_ADDRESS_LOCK_FREE BOOST_ATOMIC_POINTER_LOCK_FREE#ifndef BOOST_ATOMIC_BOOL_LOCK_FREE// We store bools in 1-byte storage in all backends#define BOOST_ATOMIC_BOOL_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE#endif#ifndef BOOST_ATOMIC_FLAG_LOCK_FREE#define BOOST_ATOMIC_FLAG_LOCK_FREE BOOST_ATOMIC_BOOL_LOCK_FREE#endif#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT)#if !defined(BOOST_ATOMIC_FLOAT_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT)#if BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 2#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 4#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 8#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 16#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE#else#define BOOST_ATOMIC_FLOAT_LOCK_FREE 0#endif#endif#if !defined(BOOST_ATOMIC_DOUBLE_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE)#if BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 2#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 4#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 8#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 16#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE#else#define BOOST_ATOMIC_DOUBLE_LOCK_FREE 0#endif#endif#if !defined(BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE)#if BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 2#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 4#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 8#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 16#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE#else#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE 0#endif#endif#endif // !defined(BOOST_ATOMIC_NO_FLOATING_POINT)#ifndef BOOST_ATOMIC_THREAD_FENCE#define BOOST_ATOMIC_THREAD_FENCE 0#endif#ifndef BOOST_ATOMIC_SIGNAL_FENCE#define BOOST_ATOMIC_SIGNAL_FENCE 0#endif#endif // BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_
 |