Chris@16
|
1 /*==============================================================================
|
Chris@16
|
2 Copyright (c) 2011 Steven Watanabe
|
Chris@16
|
3
|
Chris@16
|
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
6 ==============================================================================*/
|
Chris@16
|
7
|
Chris@16
|
8 #ifndef BOOST_PHOENIX_CMATH_HPP_INCLUDED
|
Chris@16
|
9 #define BOOST_PHOENIX_CMATH_HPP_INCLUDED
|
Chris@16
|
10
|
Chris@16
|
11 #include <boost/phoenix/core/limits.hpp>
|
Chris@16
|
12 #include <cmath>
|
Chris@16
|
13 #include <boost/phoenix/function/adapt_callable.hpp>
|
Chris@16
|
14 #include <boost/type_traits/remove_reference.hpp>
|
Chris@16
|
15 #include <boost/type_traits/remove_cv.hpp>
|
Chris@16
|
16
|
Chris@16
|
17 namespace boost {
|
Chris@16
|
18
|
Chris@16
|
19 #define BOOST_PHOENIX_MATH_FUNCTION(name, n) \
|
Chris@16
|
20 namespace phoenix_impl { \
|
Chris@16
|
21 struct name ## _impl { \
|
Chris@16
|
22 template<class Sig> \
|
Chris@16
|
23 struct result; \
|
Chris@16
|
24 template<class This, BOOST_PHOENIX_typename_A(n)> \
|
Chris@16
|
25 struct result<This(BOOST_PHOENIX_A(n))> \
|
Chris@16
|
26 { \
|
Chris@16
|
27 typedef \
|
Chris@16
|
28 typename proto::detail::uncvref<A0>::type \
|
Chris@16
|
29 type; \
|
Chris@16
|
30 }; \
|
Chris@16
|
31 template<BOOST_PHOENIX_typename_A(n)> \
|
Chris@16
|
32 A0 operator()(BOOST_PHOENIX_A_const_ref_a(n)) const { \
|
Chris@16
|
33 using namespace std; \
|
Chris@16
|
34 return name(BOOST_PHOENIX_a(n)); \
|
Chris@16
|
35 } \
|
Chris@16
|
36 }; \
|
Chris@16
|
37 } \
|
Chris@16
|
38 namespace phoenix { \
|
Chris@16
|
39 BOOST_PHOENIX_ADAPT_CALLABLE(name, phoenix_impl::name ## _impl, 1) \
|
Chris@16
|
40 }
|
Chris@16
|
41
|
Chris@16
|
42 BOOST_PHOENIX_MATH_FUNCTION(acos, 1)
|
Chris@16
|
43 BOOST_PHOENIX_MATH_FUNCTION(asin, 1)
|
Chris@16
|
44 BOOST_PHOENIX_MATH_FUNCTION(atan, 1)
|
Chris@16
|
45 BOOST_PHOENIX_MATH_FUNCTION(atan2, 2)
|
Chris@16
|
46 BOOST_PHOENIX_MATH_FUNCTION(ceil, 1)
|
Chris@16
|
47 BOOST_PHOENIX_MATH_FUNCTION(cos, 1)
|
Chris@16
|
48 BOOST_PHOENIX_MATH_FUNCTION(cosh, 1)
|
Chris@16
|
49 BOOST_PHOENIX_MATH_FUNCTION(exp, 1)
|
Chris@16
|
50 BOOST_PHOENIX_MATH_FUNCTION(fabs, 1)
|
Chris@16
|
51 BOOST_PHOENIX_MATH_FUNCTION(floor, 1)
|
Chris@16
|
52 BOOST_PHOENIX_MATH_FUNCTION(fmod, 2)
|
Chris@16
|
53 BOOST_PHOENIX_MATH_FUNCTION(frexp, 2)
|
Chris@16
|
54 BOOST_PHOENIX_MATH_FUNCTION(ldexp, 2)
|
Chris@16
|
55 BOOST_PHOENIX_MATH_FUNCTION(log, 1)
|
Chris@16
|
56 BOOST_PHOENIX_MATH_FUNCTION(log10, 1)
|
Chris@16
|
57 BOOST_PHOENIX_MATH_FUNCTION(modf, 2)
|
Chris@16
|
58 BOOST_PHOENIX_MATH_FUNCTION(pow, 2)
|
Chris@16
|
59 BOOST_PHOENIX_MATH_FUNCTION(sin, 1)
|
Chris@16
|
60 BOOST_PHOENIX_MATH_FUNCTION(sinh, 1)
|
Chris@16
|
61 BOOST_PHOENIX_MATH_FUNCTION(sqrt, 1)
|
Chris@16
|
62 BOOST_PHOENIX_MATH_FUNCTION(tan, 1)
|
Chris@16
|
63 BOOST_PHOENIX_MATH_FUNCTION(tanh, 1)
|
Chris@16
|
64
|
Chris@16
|
65 #undef BOOST_PHOENIX_MATH_FUNCTION
|
Chris@16
|
66
|
Chris@16
|
67 }
|
Chris@16
|
68
|
Chris@16
|
69 #endif
|