141 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			141 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * 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/detail/int_sizes.hpp
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This header defines macros for testing buitin integer type sizes
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/atomic/detail/config.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_HAS_PRAGMA_ONCE
							 | 
						||
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// GCC and compatible compilers define internal macros with builtin type traits
							 | 
						||
| 
								 | 
							
								#if defined(__SIZEOF_SHORT__)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT __SIZEOF_SHORT__
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if defined(__SIZEOF_INT__)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_INT __SIZEOF_INT__
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if defined(__SIZEOF_LONG__)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG __SIZEOF_LONG__
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if defined(__SIZEOF_LONG_LONG__)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG __SIZEOF_LONG_LONG__
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if defined(__SIZEOF_WCHAR_T__)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T __SIZEOF_WCHAR_T__
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if defined(__SIZEOF_POINTER__)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER __SIZEOF_POINTER__
							 | 
						||
| 
								 | 
							
								#elif defined(_MSC_VER)
							 | 
						||
| 
								 | 
							
								#if defined(_M_AMD64) || defined(_M_IA64)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 8
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 4
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_SHORT) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_INT) ||\
							 | 
						||
| 
								 | 
							
								    !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LLONG)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Try to deduce sizes from limits
							 | 
						||
| 
								 | 
							
								#include <limits.h>
							 | 
						||
| 
								 | 
							
								#include <boost/cstdint.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (USHRT_MAX + 0) == 0xff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 1
							 | 
						||
| 
								 | 
							
								#elif (USHRT_MAX + 0) == 0xffff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 2
							 | 
						||
| 
								 | 
							
								#elif (USHRT_MAX + 0) == 0xffffffff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 4
							 | 
						||
| 
								 | 
							
								#elif (USHRT_MAX + 0) == UINT64_C(0xffffffffffffffff)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 8
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (UINT_MAX + 0) == 0xff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 1
							 | 
						||
| 
								 | 
							
								#elif (UINT_MAX + 0) == 0xffff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 2
							 | 
						||
| 
								 | 
							
								#elif (UINT_MAX + 0) == 0xffffffff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 4
							 | 
						||
| 
								 | 
							
								#elif (UINT_MAX + 0) == UINT64_C(0xffffffffffffffff)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 8
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (ULONG_MAX + 0) == 0xff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 1
							 | 
						||
| 
								 | 
							
								#elif (ULONG_MAX + 0) == 0xffff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 2
							 | 
						||
| 
								 | 
							
								#elif (ULONG_MAX + 0) == 0xffffffff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 4
							 | 
						||
| 
								 | 
							
								#elif (ULONG_MAX + 0) == UINT64_C(0xffffffffffffffff)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 8
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(__hpux) // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 8
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// The list of the non-standard macros (the ones except ULLONG_MAX) is taken from cstdint.hpp
							 | 
						||
| 
								 | 
							
								#if defined(ULLONG_MAX)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULLONG_MAX
							 | 
						||
| 
								 | 
							
								#elif defined(ULONG_LONG_MAX)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULONG_LONG_MAX
							 | 
						||
| 
								 | 
							
								#elif defined(ULONGLONG_MAX)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULONGLONG_MAX
							 | 
						||
| 
								 | 
							
								#elif defined(_LLONG_MAX) // strangely enough, this one seems to be holding the limit for the unsigned integer
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_ULLONG_MAX _LLONG_MAX
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 1
							 | 
						||
| 
								 | 
							
								#elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xffff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 2
							 | 
						||
| 
								 | 
							
								#elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xffffffff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 4
							 | 
						||
| 
								 | 
							
								#elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == UINT64_C(0xffffffffffffffff)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 8
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // defined(__hpux)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <wchar.h>
							 | 
						||
| 
								 | 
							
								#include <boost/cstdint.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 #if defined(_MSC_VER) && ( _MSC_VER <= 1310 || defined(UNDER_CE) && _MSC_VER <= 1500 )
							 | 
						||
| 
								 | 
							
								// MSVC 7.1 and MSVC 8 (arm) define WCHAR_MAX to a value not suitable for constant expressions
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2
							 | 
						||
| 
								 | 
							
								#elif (WCHAR_MAX + 0) == 0xff || (WCHAR_MAX + 0) == 0x7f
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 1
							 | 
						||
| 
								 | 
							
								#elif (WCHAR_MAX + 0) == 0xffff || (WCHAR_MAX + 0) == 0x7fff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2
							 | 
						||
| 
								 | 
							
								#elif (WCHAR_MAX + 0) == 0xffffffff || (WCHAR_MAX + 0) == 0x7fffffff
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 4
							 | 
						||
| 
								 | 
							
								#elif (WCHAR_MAX + 0) == UINT64_C(0xffffffffffffffff) || (WCHAR_MAX + 0) == INT64_C(0x7fffffffffffffff)
							 | 
						||
| 
								 | 
							
								#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 8
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_SHORT) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_INT) ||\
							 | 
						||
| 
								 | 
							
								    !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LLONG) ||\
							 | 
						||
| 
								 | 
							
								    !defined(BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T)
							 | 
						||
| 
								 | 
							
								#error Boost.Atomic: Failed to determine builtin integer sizes, the target platform is not supported. Please, report to the developers.
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_
							 |