summaryrefslogtreecommitdiff
path: root/boost/numeric/odeint/util/unit_helper.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/numeric/odeint/util/unit_helper.hpp')
-rw-r--r--boost/numeric/odeint/util/unit_helper.hpp151
1 files changed, 151 insertions, 0 deletions
diff --git a/boost/numeric/odeint/util/unit_helper.hpp b/boost/numeric/odeint/util/unit_helper.hpp
new file mode 100644
index 0000000000..736b3e5722
--- /dev/null
+++ b/boost/numeric/odeint/util/unit_helper.hpp
@@ -0,0 +1,151 @@
+/*
+ [auto_generated]
+ boost/numeric/odeint/util/unit_helper.hpp
+
+ [begin_description]
+ Get and set the value of a unit.
+ [end_description]
+
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2012-2013 Mario Mulansky
+
+ 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_NUMERIC_ODEINT_UTIL_UNIT_HELPER_HPP_INCLUDED
+#define BOOST_NUMERIC_ODEINT_UTIL_UNIT_HELPER_HPP_INCLUDED
+
+
+#ifndef __CUDACC__
+#include <boost/units/quantity.hpp>
+#include <boost/units/get_dimension.hpp>
+#include <boost/units/get_system.hpp>
+#endif
+
+
+
+namespace boost {
+namespace numeric {
+namespace odeint {
+
+
+namespace detail {
+
+ template<class T , class Enabler = void >
+ struct get_unit_value_impl
+ {
+ static T value(const T &t)
+ {
+ return t;
+ }
+ typedef T result_type;
+ };
+
+#ifndef __CUDACC__
+ template<class Unit , class T>
+ struct get_unit_value_impl< boost::units::quantity< Unit , T> >
+ {
+ static T value( const boost::units::quantity< Unit , T> &t )
+ {
+ return t.value();
+ }
+ typedef T result_type;
+ };
+#endif
+
+
+
+
+
+ template<class T , class V , class Enabler = void >
+ struct set_unit_value_impl
+ {
+ static void set_value(T &t , const V &v)
+ {
+ t = v;
+ }
+ };
+
+#ifndef __CUDACC__
+ template<class Unit , class T , class V>
+ struct set_unit_value_impl<boost::units::quantity<Unit , T> , V>
+ {
+ static void set_value(boost::units::quantity<Unit , T> &t , const V &v)
+ {
+ t = boost::units::quantity<Unit , T>::from_value(v);
+ }
+ };
+#endif
+
+
+
+} // namespace detail
+
+
+ template<class T>
+ typename detail::get_unit_value_impl<T>::result_type get_unit_value(const T &t)
+ {
+ return detail::get_unit_value_impl<T>::value(t);
+ }
+
+
+ template<class T , class V>
+ void set_unit_value(T &t , const V &v)
+ {
+ return detail::set_unit_value_impl<T , V>::set_value(t , v);
+ }
+
+
+
+ template< class T >
+ struct unit_value_type
+ {
+ typedef T type;
+ };
+
+#ifndef __CUDACC__
+ template< class Unit , class Y >
+ struct unit_value_type< boost::units::quantity< Unit , Y > >
+ {
+ typedef Y type;
+ };
+#endif
+
+
+
+
+
+
+
+
+
+
+ template< typename Time >
+ struct inverse_time
+ {
+ typedef Time type;
+ };
+
+#ifndef __CUDACC__
+ template< typename Unit , typename Value >
+ struct inverse_time< boost::units::quantity< Unit , Value > >
+ {
+ typedef boost::units::quantity< Unit , Value > time_type;
+ typedef typename boost::units::get_dimension< time_type >::type dimension;
+ typedef typename boost::units::get_system< time_type >::type system;
+ typedef typename boost::mpl::divides< boost::units::dimensionless_type , dimension >::type inv_dimension;
+ typedef boost::units::unit< inv_dimension , system > inv_unit;
+ typedef boost::units::quantity< inv_unit , Value > type;
+ };
+#endif
+
+
+} // namespace odeint
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_ODEINT_UTIL_UNIT_HELPER_HPP_INCLUDED