annotate DEPENDENCIES/generic/include/boost/numeric/odeint/util/unit_helper.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 /*
Chris@16 2 [auto_generated]
Chris@16 3 boost/numeric/odeint/util/unit_helper.hpp
Chris@16 4
Chris@16 5 [begin_description]
Chris@16 6 Get and set the value of a unit.
Chris@16 7 [end_description]
Chris@16 8
Chris@101 9 Copyright 2012-2013 Karsten Ahnert
Chris@101 10 Copyright 2012-2013 Mario Mulansky
Chris@16 11
Chris@16 12 Distributed under the Boost Software License, Version 1.0.
Chris@16 13 (See accompanying file LICENSE_1_0.txt or
Chris@16 14 copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 15 */
Chris@16 16
Chris@16 17
Chris@16 18 #ifndef BOOST_NUMERIC_ODEINT_UTIL_UNIT_HELPER_HPP_INCLUDED
Chris@16 19 #define BOOST_NUMERIC_ODEINT_UTIL_UNIT_HELPER_HPP_INCLUDED
Chris@16 20
Chris@16 21
Chris@16 22 #ifndef __CUDACC__
Chris@16 23 #include <boost/units/quantity.hpp>
Chris@16 24 #include <boost/units/get_dimension.hpp>
Chris@16 25 #include <boost/units/get_system.hpp>
Chris@16 26 #endif
Chris@16 27
Chris@16 28
Chris@16 29
Chris@16 30 namespace boost {
Chris@16 31 namespace numeric {
Chris@16 32 namespace odeint {
Chris@16 33
Chris@16 34
Chris@16 35 namespace detail {
Chris@16 36
Chris@16 37 template<class T , class Enabler = void >
Chris@16 38 struct get_unit_value_impl
Chris@16 39 {
Chris@16 40 static T value(const T &t)
Chris@16 41 {
Chris@16 42 return t;
Chris@16 43 }
Chris@16 44 typedef T result_type;
Chris@16 45 };
Chris@16 46
Chris@16 47 #ifndef __CUDACC__
Chris@16 48 template<class Unit , class T>
Chris@16 49 struct get_unit_value_impl< boost::units::quantity< Unit , T> >
Chris@16 50 {
Chris@16 51 static T value( const boost::units::quantity< Unit , T> &t )
Chris@16 52 {
Chris@16 53 return t.value();
Chris@16 54 }
Chris@16 55 typedef T result_type;
Chris@16 56 };
Chris@16 57 #endif
Chris@16 58
Chris@16 59
Chris@16 60
Chris@16 61
Chris@16 62
Chris@16 63 template<class T , class V , class Enabler = void >
Chris@16 64 struct set_unit_value_impl
Chris@16 65 {
Chris@16 66 static void set_value(T &t , const V &v)
Chris@16 67 {
Chris@16 68 t = v;
Chris@16 69 }
Chris@16 70 };
Chris@16 71
Chris@16 72 #ifndef __CUDACC__
Chris@16 73 template<class Unit , class T , class V>
Chris@16 74 struct set_unit_value_impl<boost::units::quantity<Unit , T> , V>
Chris@16 75 {
Chris@16 76 static void set_value(boost::units::quantity<Unit , T> &t , const V &v)
Chris@16 77 {
Chris@16 78 t = boost::units::quantity<Unit , T>::from_value(v);
Chris@16 79 }
Chris@16 80 };
Chris@16 81 #endif
Chris@16 82
Chris@16 83
Chris@16 84
Chris@16 85 } // namespace detail
Chris@16 86
Chris@16 87
Chris@16 88 template<class T>
Chris@16 89 typename detail::get_unit_value_impl<T>::result_type get_unit_value(const T &t)
Chris@16 90 {
Chris@16 91 return detail::get_unit_value_impl<T>::value(t);
Chris@16 92 }
Chris@16 93
Chris@16 94
Chris@16 95 template<class T , class V>
Chris@16 96 void set_unit_value(T &t , const V &v)
Chris@16 97 {
Chris@16 98 return detail::set_unit_value_impl<T , V>::set_value(t , v);
Chris@16 99 }
Chris@16 100
Chris@16 101
Chris@16 102
Chris@16 103 template< class T >
Chris@16 104 struct unit_value_type
Chris@16 105 {
Chris@16 106 typedef T type;
Chris@16 107 };
Chris@16 108
Chris@16 109 #ifndef __CUDACC__
Chris@16 110 template< class Unit , class Y >
Chris@16 111 struct unit_value_type< boost::units::quantity< Unit , Y > >
Chris@16 112 {
Chris@16 113 typedef Y type;
Chris@16 114 };
Chris@16 115 #endif
Chris@16 116
Chris@16 117
Chris@16 118
Chris@16 119
Chris@16 120
Chris@16 121
Chris@16 122
Chris@16 123
Chris@16 124
Chris@16 125
Chris@16 126 template< typename Time >
Chris@16 127 struct inverse_time
Chris@16 128 {
Chris@16 129 typedef Time type;
Chris@16 130 };
Chris@16 131
Chris@16 132 #ifndef __CUDACC__
Chris@16 133 template< typename Unit , typename Value >
Chris@16 134 struct inverse_time< boost::units::quantity< Unit , Value > >
Chris@16 135 {
Chris@16 136 typedef boost::units::quantity< Unit , Value > time_type;
Chris@16 137 typedef typename boost::units::get_dimension< time_type >::type dimension;
Chris@16 138 typedef typename boost::units::get_system< time_type >::type system;
Chris@16 139 typedef typename boost::mpl::divides< boost::units::dimensionless_type , dimension >::type inv_dimension;
Chris@16 140 typedef boost::units::unit< inv_dimension , system > inv_unit;
Chris@16 141 typedef boost::units::quantity< inv_unit , Value > type;
Chris@16 142 };
Chris@16 143 #endif
Chris@16 144
Chris@16 145
Chris@16 146 } // namespace odeint
Chris@16 147 } // namespace numeric
Chris@16 148 } // namespace boost
Chris@16 149
Chris@16 150
Chris@16 151 #endif // BOOST_NUMERIC_ODEINT_UTIL_UNIT_HELPER_HPP_INCLUDED