diff options
author | Remko Tronçon <git@el-tramo.be> | 2009-06-01 08:48:42 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2009-06-01 09:24:28 (GMT) |
commit | 2812bddd81f8a1b804c7460f4e14cd0aa393d129 (patch) | |
tree | d46294f35150c4f0f43deaf2d31fceaf945ae715 /3rdParty/Boost/boost/type_traits/make_unsigned.hpp | |
download | swift-2812bddd81f8a1b804c7460f4e14cd0aa393d129.zip swift-2812bddd81f8a1b804c7460f4e14cd0aa393d129.tar.bz2 |
Import.
Diffstat (limited to '3rdParty/Boost/boost/type_traits/make_unsigned.hpp')
-rw-r--r-- | 3rdParty/Boost/boost/type_traits/make_unsigned.hpp | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/3rdParty/Boost/boost/type_traits/make_unsigned.hpp b/3rdParty/Boost/boost/type_traits/make_unsigned.hpp new file mode 100644 index 0000000..54f9f66 --- /dev/null +++ b/3rdParty/Boost/boost/type_traits/make_unsigned.hpp @@ -0,0 +1,137 @@ + +// (C) Copyright John Maddock 2007. +// Use, modification and distribution are subject to 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). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + +#ifndef BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED +#define BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED + +#include <boost/mpl/if.hpp> +#include <boost/type_traits/is_integral.hpp> +#include <boost/type_traits/is_signed.hpp> +#include <boost/type_traits/is_unsigned.hpp> +#include <boost/type_traits/is_enum.hpp> +#include <boost/type_traits/is_same.hpp> +#include <boost/type_traits/remove_cv.hpp> +#include <boost/type_traits/is_const.hpp> +#include <boost/type_traits/is_volatile.hpp> +#include <boost/type_traits/add_const.hpp> +#include <boost/type_traits/add_volatile.hpp> +#include <boost/type_traits/detail/ice_or.hpp> +#include <boost/type_traits/detail/ice_and.hpp> +#include <boost/type_traits/detail/ice_not.hpp> +#include <boost/static_assert.hpp> + +// should be the last #include +#include <boost/type_traits/detail/type_trait_def.hpp> + +namespace boost { + +namespace detail { + +template <class T> +struct make_unsigned_imp +{ + BOOST_STATIC_ASSERT( + (::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_enum<T>::value>::value)); +#if !BOOST_WORKAROUND(BOOST_MSVC, <=1300) + BOOST_STATIC_ASSERT( + (::boost::type_traits::ice_not< ::boost::is_same< + typename remove_cv<T>::type, bool>::value>::value)); +#endif + + typedef typename remove_cv<T>::type t_no_cv; + typedef typename mpl::if_c< + (::boost::type_traits::ice_and< + ::boost::is_unsigned<T>::value, + ::boost::is_integral<T>::value, + ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value >::value), + T, + typename mpl::if_c< + (::boost::type_traits::ice_and< + ::boost::is_integral<T>::value, + ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value, + ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value> + ::value), + typename mpl::if_< + is_same<t_no_cv, signed char>, + unsigned char, + typename mpl::if_< + is_same<t_no_cv, short>, + unsigned short, + typename mpl::if_< + is_same<t_no_cv, int>, + unsigned int, + typename mpl::if_< + is_same<t_no_cv, long>, + unsigned long, +#if defined(BOOST_HAS_LONG_LONG) + boost::ulong_long_type +#elif defined(BOOST_HAS_MS_INT64) + unsigned __int64 +#else + unsigned long +#endif + >::type + >::type + >::type + >::type, + // Not a regular integer type: + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned char), + unsigned char, + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned short), + unsigned short, + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned int), + unsigned int, + typename mpl::if_c< + sizeof(t_no_cv) == sizeof(unsigned long), + unsigned long, +#if defined(BOOST_HAS_LONG_LONG) + boost::ulong_long_type +#elif defined(BOOST_HAS_MS_INT64) + unsigned __int64 +#else + unsigned long +#endif + >::type + >::type + >::type + >::type + >::type + >::type base_integer_type; + + // Add back any const qualifier: + typedef typename mpl::if_< + is_const<T>, + typename add_const<base_integer_type>::type, + base_integer_type + >::type const_base_integer_type; + + // Add back any volatile qualifier: + typedef typename mpl::if_< + is_volatile<T>, + typename add_volatile<const_base_integer_type>::type, + const_base_integer_type + >::type type; +}; + + +} // namespace detail + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(make_unsigned,T,typename boost::detail::make_unsigned_imp<T>::type) + +} // namespace boost + +#include <boost/type_traits/detail/type_trait_undef.hpp> + +#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED + |