// 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) 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_DERIVED_DIMENSION_HPP | |
#define BOOST_UNITS_DERIVED_DIMENSION_HPP | |
#include <boost/units/dim.hpp> | |
#include <boost/units/dimension.hpp> | |
#include <boost/units/static_rational.hpp> | |
#include <boost/units/units_fwd.hpp> | |
#include <boost/units/detail/dimension_list.hpp> | |
namespace boost { | |
namespace units { | |
/// A utility class for defining composite dimensions with integer powers. | |
template<class DT1 = dimensionless_type,long E1 = 0, | |
class DT2 = dimensionless_type,long E2 = 0, | |
class DT3 = dimensionless_type,long E3 = 0, | |
class DT4 = dimensionless_type,long E4 = 0, | |
class DT5 = dimensionless_type,long E5 = 0, | |
class DT6 = dimensionless_type,long E6 = 0, | |
class DT7 = dimensionless_type,long E7 = 0, | |
class DT8 = dimensionless_type,long E8 = 0> | |
struct derived_dimension | |
{ | |
#ifdef BOOST_UNITS_DOXYGEN | |
typedef detail::unspecified type; | |
#else | |
typedef typename | |
make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
list< dim< DT2,static_rational<E2> >, | |
list< dim< DT3,static_rational<E3> >, | |
list< dim< DT4,static_rational<E4> >, | |
list< dim< DT5,static_rational<E5> >, | |
list< dim< DT6,static_rational<E6> >, | |
list< dim< DT7,static_rational<E7> >, | |
list< dim< DT8,static_rational<E8> >, dimensionless_type > > > > > > > > >::type type; | |
#endif | |
}; | |
/// INTERNAL ONLY | |
template<class DT1,long E1> | |
struct derived_dimension< | |
DT1, E1, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0> | |
{ | |
typedef typename | |
make_dimension_list< list< dim< DT1,static_rational<E1> >, dimensionless_type > >::type type; | |
}; | |
/// INTERNAL ONLY | |
template<class DT1,long E1, | |
class DT2,long E2> | |
struct derived_dimension< | |
DT1, E1, | |
DT2, E2, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0> | |
{ | |
typedef typename | |
make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
list< dim< DT2,static_rational<E2> >, dimensionless_type > > >::type type; | |
}; | |
/// INTERNAL ONLY | |
template<class DT1,long E1, | |
class DT2,long E2, | |
class DT3,long E3> | |
struct derived_dimension< | |
DT1, E1, | |
DT2, E2, | |
DT3, E3, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0> | |
{ | |
typedef typename | |
make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
list< dim< DT2,static_rational<E2> >, | |
list< dim< DT3,static_rational<E3> >, dimensionless_type > > > >::type type; | |
}; | |
/// INTERNAL ONLY | |
template<class DT1,long E1, | |
class DT2,long E2, | |
class DT3,long E3, | |
class DT4,long E4> | |
struct derived_dimension< | |
DT1, E1, | |
DT2, E2, | |
DT3, E3, | |
DT4, E4, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0> | |
{ | |
typedef typename | |
make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
list< dim< DT2,static_rational<E2> >, | |
list< dim< DT3,static_rational<E3> >, | |
list< dim< DT4,static_rational<E4> >, dimensionless_type > > > > >::type type; | |
}; | |
/// INTERNAL ONLY | |
template<class DT1,long E1, | |
class DT2,long E2, | |
class DT3,long E3, | |
class DT4,long E4, | |
class DT5,long E5> | |
struct derived_dimension< | |
DT1, E1, | |
DT2, E2, | |
DT3, E3, | |
DT4, E4, | |
DT5, E5, | |
dimensionless_type,0, | |
dimensionless_type,0, | |
dimensionless_type,0> | |
{ | |
typedef typename | |
make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
list< dim< DT2,static_rational<E2> >, | |
list< dim< DT3,static_rational<E3> >, | |
list< dim< DT4,static_rational<E4> >, | |
list< dim< DT5,static_rational<E5> >, dimensionless_type > > > > > >::type type; | |
}; | |
/// INTERNAL ONLY | |
template<class DT1,long E1, | |
class DT2,long E2, | |
class DT3,long E3, | |
class DT4,long E4, | |
class DT5,long E5, | |
class DT6,long E6> | |
struct derived_dimension< | |
DT1, E1, | |
DT2, E2, | |
DT3, E3, | |
DT4, E4, | |
DT5, E5, | |
DT6, E6, | |
dimensionless_type,0, | |
dimensionless_type,0> | |
{ | |
typedef typename | |
make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
list< dim< DT2,static_rational<E2> >, | |
list< dim< DT3,static_rational<E3> >, | |
list< dim< DT4,static_rational<E4> >, | |
list< dim< DT5,static_rational<E5> >, | |
list< dim< DT6,static_rational<E6> >, dimensionless_type > > > > > > >::type type; | |
}; | |
/// INTERNAL ONLY | |
template<class DT1,long E1, | |
class DT2,long E2, | |
class DT3,long E3, | |
class DT4,long E4, | |
class DT5,long E5, | |
class DT6,long E6, | |
class DT7,long E7> | |
struct derived_dimension< | |
DT1, E1, | |
DT2, E2, | |
DT3, E3, | |
DT4, E4, | |
DT5, E5, | |
DT6, E6, | |
DT7, E7, | |
dimensionless_type,0> | |
{ | |
typedef typename | |
make_dimension_list< list< dim< DT1,static_rational<E1> >, | |
list< dim< DT2,static_rational<E2> >, | |
list< dim< DT3,static_rational<E3> >, | |
list< dim< DT4,static_rational<E4> >, | |
list< dim< DT5,static_rational<E5> >, | |
list< dim< DT6,static_rational<E6> >, | |
list< dim< DT7,static_rational<E7> >, dimensionless_type > > > > > > > >::type type; | |
}; | |
} // namespace units | |
} // namespace boost | |
#endif // BOOST_UNITS_DERIVED_DIMENSION_HPP |