diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
commit | 1a78a62555be32868418fe52f8e330c9d0f95d5a (patch) | |
tree | d3765a80e7d3b9640ec2e930743630cd6b9fce2b /boost/units/make_scaled_unit.hpp | |
download | boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.gz boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.bz2 boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.zip |
Imported Upstream version 1.49.0upstream/1.49.0
Diffstat (limited to 'boost/units/make_scaled_unit.hpp')
-rw-r--r-- | boost/units/make_scaled_unit.hpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/boost/units/make_scaled_unit.hpp b/boost/units/make_scaled_unit.hpp new file mode 100644 index 0000000000..d9740ffd80 --- /dev/null +++ b/boost/units/make_scaled_unit.hpp @@ -0,0 +1,60 @@ +// 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) 2007-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_MAKE_SCALED_UNIT_HPP_INCLUDED +#define BOOST_UNITS_MAKE_SCALED_UNIT_HPP_INCLUDED + +#include <boost/units/units_fwd.hpp> +#include <boost/units/heterogeneous_system.hpp> +#include <boost/units/unit.hpp> + +namespace boost { +namespace units { + +template<class Unit, class Scale> +struct make_scaled_unit { + typedef typename make_scaled_unit<typename reduce_unit<Unit>::type, Scale>::type type; +}; + +template<class Dimension, class UnitList, class OldScale, class Scale> +struct make_scaled_unit<unit<Dimension, heterogeneous_system<heterogeneous_system_impl<UnitList, Dimension, OldScale> > >, Scale> { + typedef unit< + Dimension, + heterogeneous_system< + heterogeneous_system_impl< + UnitList, + Dimension, + typename mpl::times< + OldScale, + list<scale_list_dim<Scale>, dimensionless_type> + >::type + > + > + > type; +}; + +template<class Dimension, class UnitList, class OldScale, long Base> +struct make_scaled_unit<unit<Dimension, heterogeneous_system<heterogeneous_system_impl<UnitList, Dimension, OldScale> > >, scale<Base, static_rational<0> > > { + typedef unit< + Dimension, + heterogeneous_system< + heterogeneous_system_impl< + UnitList, + Dimension, + OldScale + > + > + > type; +}; + +} +} + +#endif |