209 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// 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
 |