1 | // |
2 | //! Copyright (c) 2011-2012 |
3 | //! Brandon Kohn |
4 | // |
5 | // Distributed under the Boost Software License, Version 1.0. (See |
6 | // accompanying file LICENSE_1_0.txt or copy at |
7 | // http://www.boost.org/LICENSE_1_0.txt) |
8 | // |
9 | |
10 | #if !defined(BOOST_NUMERIC_CONVERSION_DONT_USE_PREPROCESSED_FILES) |
11 | |
12 | #include <boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp> |
13 | |
14 | #if !defined(BOOST_NO_LONG_LONG) |
15 | #include <boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp> |
16 | #endif |
17 | |
18 | #else |
19 | #if !BOOST_PP_IS_ITERATING |
20 | |
21 | #include <boost/preprocessor/seq/elem.hpp> |
22 | #include <boost/preprocessor/seq/size.hpp> |
23 | #include <boost/preprocessor/iteration/iterate.hpp> |
24 | |
25 | #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) |
26 | #pragma wave option(preserve: 2, line: 0, output: "preprocessed/numeric_cast_traits_common.hpp") |
27 | #endif |
28 | // |
29 | //! Copyright (c) 2011-2012 |
30 | //! Brandon Kohn |
31 | // |
32 | // Distributed under the Boost Software License, Version 1.0. (See |
33 | // accompanying file LICENSE_1_0.txt or copy at |
34 | // http://www.boost.org/LICENSE_1_0.txt) |
35 | // |
36 | #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) |
37 | #pragma wave option(preserve: 1) |
38 | #endif |
39 | |
40 | //! These are the assumed common built in fundamental types (not typedefs/macros.) |
41 | #define BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES() \ |
42 | (char) \ |
43 | (signed char) \ |
44 | (unsigned char) \ |
45 | (short) \ |
46 | (unsigned short) \ |
47 | (int) \ |
48 | (unsigned int) \ |
49 | (long) \ |
50 | (unsigned long) \ |
51 | (float) \ |
52 | (double) \ |
53 | (long double) \ |
54 | /***/ |
55 | |
56 | #define BOOST_NUMERIC_CONVERSION_SEQ_A() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES() |
57 | #define BOOST_NUMERIC_CONVERSION_SEQ_B() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES() |
58 | |
59 | namespace boost { namespace numeric { |
60 | |
61 | #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_A())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>)) |
62 | #include BOOST_PP_ITERATE() |
63 | |
64 | }}//namespace boost::numeric; |
65 | |
66 | #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) |
67 | #pragma wave option(output: null) |
68 | #endif |
69 | |
70 | #if ( defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) ) || !defined(BOOST_NO_LONG_LONG) |
71 | |
72 | #undef BOOST_NUMERIC_CONVERSION_SEQ_A |
73 | #undef BOOST_NUMERIC_CONVERSION_SEQ_B |
74 | |
75 | #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) |
76 | #pragma wave option(preserve: 2, line: 0, output: "preprocessed/numeric_cast_traits_long_long.hpp") |
77 | #endif |
78 | |
79 | // |
80 | //! Copyright (c) 2011-2012 |
81 | //! Brandon Kohn |
82 | // |
83 | // Distributed under the Boost Software License, Version 1.0. (See |
84 | // accompanying file LICENSE_1_0.txt or copy at |
85 | // http://www.boost.org/LICENSE_1_0.txt) |
86 | // |
87 | #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) |
88 | #pragma wave option(preserve: 1) |
89 | #endif |
90 | |
91 | namespace boost { namespace numeric { |
92 | |
93 | #define BOOST_NUMERIC_CONVERSION_SEQ_A() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES()(boost::long_long_type)(boost::ulong_long_type) |
94 | #define BOOST_NUMERIC_CONVERSION_SEQ_B() (boost::long_long_type)(boost::ulong_long_type) |
95 | |
96 | #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_A())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>)) |
97 | #include BOOST_PP_ITERATE() |
98 | |
99 | }}//namespace boost::numeric; |
100 | |
101 | #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) |
102 | #pragma wave option(output: null) |
103 | #endif |
104 | |
105 | #endif |
106 | |
107 | #undef BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES |
108 | #undef BOOST_NUMERIC_CONVERSION_SEQ_A |
109 | #undef BOOST_NUMERIC_CONVERSION_SEQ_B |
110 | |
111 | #elif BOOST_PP_ITERATION_DEPTH() == 1 |
112 | |
113 | #define BOOST_PP_ITERATION_PARAMS_2 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_B())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>)) |
114 | #include BOOST_PP_ITERATE() |
115 | |
116 | #elif BOOST_PP_ITERATION_DEPTH() == 2 |
117 | |
118 | //! Generate default traits for the specified source and target. |
119 | #define BOOST_NUMERIC_CONVERSION_A BOOST_PP_FRAME_ITERATION(1) |
120 | #define BOOST_NUMERIC_CONVERSION_B BOOST_PP_FRAME_ITERATION(2) |
121 | |
122 | template <> |
123 | struct numeric_cast_traits |
124 | < |
125 | BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_A, BOOST_NUMERIC_CONVERSION_SEQ_A()) |
126 | , BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_SEQ_B()) |
127 | > |
128 | { |
129 | typedef def_overflow_handler overflow_policy; |
130 | typedef UseInternalRangeChecker range_checking_policy; |
131 | typedef Trunc<BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_SEQ_B())> rounding_policy; |
132 | }; |
133 | |
134 | #undef BOOST_NUMERIC_CONVERSION_A |
135 | #undef BOOST_NUMERIC_CONVERSION_B |
136 | |
137 | #endif//! Depth 2. |
138 | #endif// BOOST_NUMERIC_CONVERSION_DONT_USE_PREPROCESSED_FILES |
139 | |