Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/ratio/detail/mpl/sign.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
1 //////////////////////////////////////////////////////////////////// | |
2 // | |
3 // Copyright Vicente J. Botet Escriba 2010 | |
4 // | |
5 // Distributed under the Boost Software License, Version 1.0. | |
6 // (See accompanying file LICENSE_1_0.txt or copy at | |
7 // http://www.boost.org/LICENSE_1_0.txt) | |
8 // | |
9 // See http://www.boost.org/libs/mpl for documentation. | |
10 // | |
11 //////////////////////////////////////////////////////////////////// | |
12 #ifndef BOOST_MPL_SIGN_HPP_INCLUDED | |
13 #define BOOST_MPL_SIGN_HPP_INCLUDED | |
14 | |
15 #include <boost/mpl/integral_c.hpp> | |
16 #include <boost/mpl/aux_/na_spec.hpp> | |
17 #include <boost/mpl/aux_/lambda_support.hpp> | |
18 #include <boost/mpl/aux_/config/eti.hpp> | |
19 #include <boost/mpl/aux_/config/integral.hpp> | |
20 #include <boost/mpl/aux_/config/static_constant.hpp> | |
21 | |
22 #if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2) \ | |
23 && !defined(BOOST_MPL_PREPROCESSING_MODE) \ | |
24 && ( defined(BOOST_MSVC) \ | |
25 || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \ | |
26 ) | |
27 | |
28 # define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2 | |
29 | |
30 #endif | |
31 | |
32 namespace boost { namespace mpl { | |
33 | |
34 template< typename Tag > struct sign_impl; | |
35 | |
36 template< typename T > struct sign_tag | |
37 { | |
38 typedef typename T::tag type; | |
39 }; | |
40 | |
41 template< | |
42 typename BOOST_MPL_AUX_NA_PARAM(N) | |
43 > | |
44 struct sign | |
45 : sign_impl< | |
46 typename sign_tag<N>::type | |
47 >::template apply<N>::type | |
48 { | |
49 BOOST_MPL_AUX_LAMBDA_SUPPORT(1, sign, (N)) | |
50 }; | |
51 | |
52 BOOST_MPL_AUX_NA_SPEC(1, sign) | |
53 | |
54 template< | |
55 typename T | |
56 , T n1 | |
57 > | |
58 struct sign_c | |
59 : sign<integral_c<T,n1> > | |
60 { | |
61 }; | |
62 | |
63 #if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2) | |
64 namespace aux { | |
65 template< typename T, T n > struct sign_wknd | |
66 { | |
67 BOOST_STATIC_CONSTANT(T, value = (n == 0 ? 0 : (n < 0 ? -1 : 1))); | |
68 typedef integral_c<T,value> type; | |
69 }; | |
70 } | |
71 #endif | |
72 | |
73 template<> | |
74 struct sign_impl<integral_c_tag> | |
75 { | |
76 #if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2) | |
77 template< typename N > struct apply | |
78 : aux::sign_wknd< typename N::value_type, N::value > | |
79 #else | |
80 template< typename N > struct apply | |
81 : integral_c< typename N::value_type, (N::value == 0 ? 0 : (N::value < 0 ? -1 : 1)) > | |
82 #endif | |
83 { | |
84 }; | |
85 }; | |
86 | |
87 }} | |
88 | |
89 #endif // BOOST_MPL_SIGN_HPP_INCLUDED |