1 | // Boost.Units - A C++ library for zero-overhead dimensional analysis and |
2 | // unit/quantity manipulation and conversion |
3 | // |
4 | // Copyright (C) 2003-2008 Matthias Christian Schabel |
5 | // Copyright (C) 2007-2008 Steven Watanabe |
6 | // |
7 | // Distributed under the Boost Software License, Version 1.0. (See |
8 | // accompanying file LICENSE_1_0.txt or copy at |
9 | // http://www.boost.org/LICENSE_1_0.txt) |
10 | |
11 | #ifndef BOOST_UNITS_MAKE_SCALED_UNIT_HPP_INCLUDED |
12 | #define BOOST_UNITS_MAKE_SCALED_UNIT_HPP_INCLUDED |
13 | |
14 | #include <boost/units/units_fwd.hpp> |
15 | #include <boost/units/heterogeneous_system.hpp> |
16 | #include <boost/units/unit.hpp> |
17 | |
18 | namespace boost { |
19 | namespace units { |
20 | |
21 | template<class Unit, class Scale> |
22 | struct make_scaled_unit { |
23 | typedef typename make_scaled_unit<typename reduce_unit<Unit>::type, Scale>::type type; |
24 | }; |
25 | |
26 | template<class Dimension, class UnitList, class OldScale, class Scale> |
27 | struct make_scaled_unit<unit<Dimension, heterogeneous_system<heterogeneous_system_impl<UnitList, Dimension, OldScale> > >, Scale> { |
28 | typedef unit< |
29 | Dimension, |
30 | heterogeneous_system< |
31 | heterogeneous_system_impl< |
32 | UnitList, |
33 | Dimension, |
34 | typename mpl::times< |
35 | OldScale, |
36 | list<scale_list_dim<Scale>, dimensionless_type> |
37 | >::type |
38 | > |
39 | > |
40 | > type; |
41 | }; |
42 | |
43 | template<class Dimension, class UnitList, class OldScale, long Base> |
44 | struct make_scaled_unit<unit<Dimension, heterogeneous_system<heterogeneous_system_impl<UnitList, Dimension, OldScale> > >, scale<Base, static_rational<0> > > { |
45 | typedef unit< |
46 | Dimension, |
47 | heterogeneous_system< |
48 | heterogeneous_system_impl< |
49 | UnitList, |
50 | Dimension, |
51 | OldScale |
52 | > |
53 | > |
54 | > type; |
55 | }; |
56 | |
57 | } |
58 | } |
59 | |
60 | #endif |
61 | |