Home | History | Annotate | Download | only in detail
      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