1 // Boost integer_fwd.hpp header file ---------------------------------------// 2 3 // (C) Copyright Dave Abrahams and Daryle Walker 2001. Distributed under the Boost 4 // Software License, Version 1.0. (See accompanying file 5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 7 // See http://www.boost.org/libs/integer for documentation. 8 9 #ifndef BOOST_INTEGER_FWD_HPP 10 #define BOOST_INTEGER_FWD_HPP 11 12 #include <climits> // for UCHAR_MAX, etc. 13 #include <cstddef> // for std::size_t 14 15 #include <boost/config.hpp> // for BOOST_NO_INTRINSIC_WCHAR_T 16 #include <boost/limits.hpp> // for std::numeric_limits 17 #include <boost/cstdint.hpp> // For intmax_t 18 19 20 namespace boost 21 { 22 23 #ifdef BOOST_NO_INTEGRAL_INT64_T 24 typedef unsigned long static_log2_argument_type; 25 typedef int static_log2_result_type; 26 typedef long static_min_max_signed_type; 27 typedef unsigned long static_min_max_unsigned_type; 28 #else 29 typedef boost::uintmax_t static_min_max_unsigned_type; 30 typedef boost::intmax_t static_min_max_signed_type; 31 typedef boost::uintmax_t static_log2_argument_type; 32 typedef int static_log2_result_type; 33 #endif 34 35 // From <boost/cstdint.hpp> ------------------------------------------------// 36 37 // Only has typedefs or using statements, with #conditionals 38 39 40 // From <boost/integer_traits.hpp> -----------------------------------------// 41 42 template < class T > 43 class integer_traits; 44 45 template < > 46 class integer_traits< bool >; 47 48 template < > 49 class integer_traits< char >; 50 51 template < > 52 class integer_traits< signed char >; 53 54 template < > 55 class integer_traits< unsigned char >; 56 57 #ifndef BOOST_NO_INTRINSIC_WCHAR_T 58 template < > 59 class integer_traits< wchar_t >; 60 #endif 61 62 template < > 63 class integer_traits< short >; 64 65 template < > 66 class integer_traits< unsigned short >; 67 68 template < > 69 class integer_traits< int >; 70 71 template < > 72 class integer_traits< unsigned int >; 73 74 template < > 75 class integer_traits< long >; 76 77 template < > 78 class integer_traits< unsigned long >; 79 80 #if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG) 81 template < > 82 class integer_traits< ::boost::long_long_type>; 83 84 template < > 85 class integer_traits< ::boost::ulong_long_type >; 86 #elif !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_MS_INT64) 87 template < > 88 class integer_traits<__int64>; 89 90 template < > 91 class integer_traits<unsigned __int64>; 92 #endif 93 94 95 // From <boost/integer.hpp> ------------------------------------------------// 96 97 template < typename LeastInt > 98 struct int_fast_t; 99 100 template< int Bits > 101 struct int_t; 102 103 template< int Bits > 104 struct uint_t; 105 106 #if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) 107 template< boost::long_long_type MaxValue > // maximum value to require support 108 #else 109 template< long MaxValue > // maximum value to require support 110 #endif 111 struct int_max_value_t; 112 113 #if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) 114 template< boost::long_long_type MinValue > // minimum value to require support 115 #else 116 template< long MinValue > // minimum value to require support 117 #endif 118 struct int_min_value_t; 119 120 #if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) 121 template< boost::ulong_long_type MaxValue > // maximum value to require support 122 #else 123 template< unsigned long MaxValue > // maximum value to require support 124 #endif 125 struct uint_value_t; 126 127 128 // From <boost/integer/integer_mask.hpp> -----------------------------------// 129 130 template < std::size_t Bit > 131 struct high_bit_mask_t; 132 133 template < std::size_t Bits > 134 struct low_bits_mask_t; 135 136 template < > 137 struct low_bits_mask_t< ::std::numeric_limits<unsigned char>::digits >; 138 139 // From <boost/integer/static_log2.hpp> ------------------------------------// 140 141 template <static_log2_argument_type Value > 142 struct static_log2; 143 144 template <> struct static_log2<0u>; 145 146 147 // From <boost/integer/static_min_max.hpp> ---------------------------------// 148 149 template <static_min_max_signed_type Value1, static_min_max_signed_type Value2> 150 struct static_signed_min; 151 152 template <static_min_max_signed_type Value1, static_min_max_signed_type Value2> 153 struct static_signed_max; 154 155 template <static_min_max_unsigned_type Value1, static_min_max_unsigned_type Value2> 156 struct static_unsigned_min; 157 158 template <static_min_max_unsigned_type Value1, static_min_max_unsigned_type Value2> 159 struct static_unsigned_max; 160 161 162 namespace integer 163 { 164 // From <boost/integer/common_factor_ct.hpp> 165 166 #ifdef BOOST_NO_INTEGRAL_INT64_T 167 typedef unsigned long static_gcd_type; 168 #else 169 typedef boost::uintmax_t static_gcd_type; 170 #endif 171 172 template < static_gcd_type Value1, static_gcd_type Value2 > 173 struct static_gcd; 174 template < static_gcd_type Value1, static_gcd_type Value2 > 175 struct static_lcm; 176 177 178 // From <boost/integer/common_factor_rt.hpp> 179 180 template < typename IntegerType > 181 class gcd_evaluator; 182 template < typename IntegerType > 183 class lcm_evaluator; 184 185 } // namespace integer 186 187 } // namespace boost 188 189 190 #endif // BOOST_INTEGER_FWD_HPP 191