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)
9 #if !defined(BOOST_NUMERIC_CONVERSION_DONT_USE_PREPROCESSED_FILES)
10 #include <boost/numeric/conversion/detail/preprocessed/numeric_cast_traits.hpp>
12 #if !BOOST_PP_IS_ITERATING
14 #include <boost/preprocessor/iteration/iterate.hpp>
15 #include <boost/preprocessor/seq/elem.hpp>
16 #include <boost/preprocessor/seq/size.hpp>
18 #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
19 #pragma wave option(preserve: 2, line: 0, output: "preprocessed/numeric_cast_traits.hpp")
23 //! Copyright (c) 2011
26 // Distributed under the Boost Software License, Version 1.0. (See
27 // accompanying file LICENSE_1_0.txt or copy at
28 // http://www.boost.org/LICENSE_1_0.txt)
30 #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
31 #pragma wave option(preserve: 1)
34 //! Generate the specializations for the built-in types.
35 #if !defined( BOOST_NO_INT64_T )
36 #define BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES() \
51 #define BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES() \
65 namespace boost { namespace numeric {
67 #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))
68 #include BOOST_PP_ITERATE()
70 }}//namespace boost::numeric;
72 #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
73 #pragma wave option(output: null)
76 #undef BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES
78 #elif BOOST_PP_ITERATION_DEPTH() == 1
80 #define BOOST_PP_ITERATION_PARAMS_2 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))
81 #include BOOST_PP_ITERATE()
83 #elif BOOST_PP_ITERATION_DEPTH() == 2
85 //! Generate default traits for the specified source and target.
86 #define BOOST_NUMERIC_CONVERSION_A BOOST_PP_FRAME_ITERATION(1)
87 #define BOOST_NUMERIC_CONVERSION_B BOOST_PP_FRAME_ITERATION(2)
90 struct numeric_cast_traits
92 BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_A, BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES())
93 , BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES())
96 typedef def_overflow_handler overflow_policy;
97 typedef UseInternalRangeChecker range_checking_policy;
98 typedef Trunc<BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_BUILTIN_TYPES())> rounding_policy;
101 #undef BOOST_NUMERIC_CONVERSION_A
102 #undef BOOST_NUMERIC_CONVERSION_B
105 #endif// BOOST_NUMERIC_CONVERSION_DONT_USE_PREPROCESSED_FILES