]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/mpl/aux_/largest_int.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
0805371bc433e6e50f80e155a4d1a01b033295ba
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / aux_ / largest_int.hpp
1 \r
2 #ifndef BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED\r
3 #define BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED\r
4 \r
5 // Copyright Aleksey Gurtovoy 2000-2004\r
6 //\r
7 // Distributed under the Boost Software License, Version 1.0. \r
8 // (See accompanying file LICENSE_1_0.txt or copy at \r
9 // http://www.boost.org/LICENSE_1_0.txt)\r
10 //\r
11 // See http://www.boost.org/libs/mpl for documentation.\r
12 \r
13 // $Id: largest_int.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\r
14 // $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $\r
15 // $Revision: 49267 $\r
16 \r
17 #include <boost/mpl/if.hpp>\r
18 #include <boost/mpl/int.hpp>\r
19 #include <boost/mpl/aux_/config/integral.hpp>\r
20 #include <boost/config.hpp>\r
21 \r
22 namespace boost { namespace mpl { namespace aux {\r
23 \r
24 template< typename T > struct integral_rank;\r
25 \r
26 template<> struct integral_rank<bool>           : int_<1> {};\r
27 template<> struct integral_rank<signed char>    : int_<2> {};\r
28 template<> struct integral_rank<char>           : int_<3> {};\r
29 template<> struct integral_rank<unsigned char>  : int_<4> {};\r
30 #if !defined(BOOST_NO_INTRINSIC_WCHAR_T)\r
31 template<> struct integral_rank<wchar_t>        : int_<5> {};\r
32 #endif\r
33 template<> struct integral_rank<short>          : int_<6> {};\r
34 template<> struct integral_rank<unsigned short> : int_<7> {};\r
35 template<> struct integral_rank<int>            : int_<8> {};\r
36 template<> struct integral_rank<unsigned int>   : int_<9> {};\r
37 template<> struct integral_rank<long>           : int_<10> {};\r
38 template<> struct integral_rank<unsigned long>  : int_<11> {};\r
39 \r
40 #if defined(BOOST_HAS_LONG_LONG)\r
41 template<> struct integral_rank<long_long_type> : int_<12> {};\r
42 template<> struct integral_rank<ulong_long_type>: int_<13> {};\r
43 #endif\r
44 \r
45 template< typename T1, typename T2 > struct largest_int\r
46 #if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)\r
47     : if_c< \r
48           ( integral_rank<T1>::value >= integral_rank<T2>::value )\r
49         , T1\r
50         , T2\r
51         >\r
52 {\r
53 #else\r
54 {\r
55     enum { rank1 = integral_rank<T1>::value };\r
56     enum { rank2 = integral_rank<T2>::value };\r
57     typedef typename if_c< (rank1 >= rank2),T1,T2 >::type type;\r
58 #endif\r
59 };\r
60 \r
61 }}}\r
62 \r
63 #endif // BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED\r