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
59namespace 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
91namespace 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