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