diff DEPENDENCIES/generic/include/boost/units/pow.hpp @ 16:2665513ce2d3

Add boost headers
author Chris Cannam
date Tue, 05 Aug 2014 11:11:38 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DEPENDENCIES/generic/include/boost/units/pow.hpp	Tue Aug 05 11:11:38 2014 +0100
@@ -0,0 +1,112 @@
+// Boost.Units - A C++ library for zero-overhead dimensional analysis and 
+// unit/quantity manipulation and conversion
+//
+// Copyright (C) 2003-2008 Matthias Christian Schabel
+// Copyright (C) 2008 Steven Watanabe
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_UNITS_POW_HPP 
+#define BOOST_UNITS_POW_HPP
+
+#include <boost/math_fwd.hpp>
+#include <boost/type_traits/is_integral.hpp>
+
+#include <boost/units/operators.hpp>
+#include <boost/units/static_rational.hpp>
+#include <boost/units/detail/static_rational_power.hpp>
+
+/// \file 
+/// \brief Raise values to exponents known at compile-time.
+
+namespace boost {
+
+namespace units {
+
+/// raise a value to a @c static_rational power.
+template<class Rat,class Y>
+inline typename power_typeof_helper<Y,Rat>::type
+pow(const Y& x)
+{
+    return power_typeof_helper<Y,Rat>::value(x);
+}
+
+/// raise a value to an integer power.
+template<long N,class Y>
+inline typename power_typeof_helper<Y,static_rational<N> >::type
+pow(const Y& x)
+{
+    return power_typeof_helper<Y,static_rational<N> >::value(x);
+}
+
+#ifndef BOOST_UNITS_DOXYGEN
+
+/// raise @c T to a @c static_rational power.
+template<class T, long N,long D> 
+struct power_typeof_helper<T, static_rational<N,D> >                
+{ 
+    typedef typename mpl::if_<boost::is_integral<T>, double, T>::type internal_type;
+    typedef detail::static_rational_power_impl<static_rational<N, D>, internal_type> impl;
+    typedef typename impl::type type; 
+    
+    static type value(const T& x)  
+    {
+        return impl::call(x);
+    }
+};
+
+/// raise @c float to a @c static_rational power.
+template<long N,long D> 
+struct power_typeof_helper<float, static_rational<N,D> >
+{
+    // N.B.  pathscale doesn't accept inheritance for some reason.
+    typedef power_typeof_helper<double, static_rational<N,D> > base;
+    typedef typename base::type type;
+    static type value(const double& x)
+    {
+        return base::value(x);
+    }
+};
+
+#endif
+
+/// take the @c static_rational root of a value.
+template<class Rat,class Y>
+typename root_typeof_helper<Y,Rat>::type
+root(const Y& x)
+{
+    return root_typeof_helper<Y,Rat>::value(x);
+}
+
+/// take the integer root of a value.
+template<long N,class Y>
+typename root_typeof_helper<Y,static_rational<N> >::type
+root(const Y& x)
+{
+    return root_typeof_helper<Y,static_rational<N> >::value(x);
+}
+
+#ifndef BOOST_UNITS_DOXYGEN
+
+/// take @c static_rational root of an @c T
+template<class T, long N,long D> 
+struct root_typeof_helper<T,static_rational<N,D> >
+{
+    // N.B.  pathscale doesn't accept inheritance for some reason.
+    typedef power_typeof_helper<T, static_rational<D,N> > base;
+    typedef typename base::type type;
+    static type value(const T& x)
+    {
+        return(base::value(x));
+    }
+};
+
+#endif
+
+} // namespace units
+
+} // namespace boost
+
+#endif // BOOST_UNITS_STATIC_RATIONAL_HPP