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