91 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			1.8 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_DIM_IMPL_HPP
 | 
						|
#define BOOST_UNITS_DIM_IMPL_HPP
 | 
						|
 | 
						|
#include <boost/mpl/bool.hpp>
 | 
						|
#include <boost/mpl/less.hpp>
 | 
						|
 | 
						|
#include <boost/units/units_fwd.hpp>
 | 
						|
 | 
						|
/// \file 
 | 
						|
/// \brief Class encapsulating a dimension tag/value pair
 | 
						|
 | 
						|
namespace boost {
 | 
						|
 | 
						|
namespace units {
 | 
						|
 | 
						|
namespace detail {
 | 
						|
 | 
						|
struct dim_tag;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
namespace mpl {
 | 
						|
 | 
						|
/// Less than comparison for sorting @c dim.
 | 
						|
template<>
 | 
						|
struct less_impl<boost::units::detail::dim_tag, boost::units::detail::dim_tag>
 | 
						|
{
 | 
						|
    template<class T0, class T1>
 | 
						|
    struct apply : mpl::less<typename T0::tag_type, typename T1::tag_type> {};
 | 
						|
};
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
namespace units {
 | 
						|
 | 
						|
template<class Tag, class Exponent>
 | 
						|
struct dim;
 | 
						|
 | 
						|
template<long N, long D>
 | 
						|
class static_rational;
 | 
						|
 | 
						|
namespace detail {
 | 
						|
 | 
						|
/// Extract @c tag_type from a @c dim.
 | 
						|
template<typename T>
 | 
						|
struct get_tag
 | 
						|
{
 | 
						|
    typedef typename T::tag_type    type;
 | 
						|
};
 | 
						|
 | 
						|
/// Extract @c value_type from a @c dim.
 | 
						|
template<typename T>
 | 
						|
struct get_value
 | 
						|
{
 | 
						|
    typedef typename T::value_type    type;
 | 
						|
};
 | 
						|
 | 
						|
/// Determine if a @c dim is empty (has a zero exponent).
 | 
						|
template<class T>
 | 
						|
struct is_empty_dim;
 | 
						|
 | 
						|
template<typename T>
 | 
						|
struct is_empty_dim< dim<T, static_rational<0, 1> > > :
 | 
						|
    mpl::true_ 
 | 
						|
{ };
 | 
						|
 | 
						|
template<typename T, typename V>
 | 
						|
struct is_empty_dim< dim<T, V> > :
 | 
						|
    mpl::false_ 
 | 
						|
{ };
 | 
						|
 | 
						|
} // namespace detail
 | 
						|
 | 
						|
} // namespace units
 | 
						|
 | 
						|
} // namespace boost
 | 
						|
 | 
						|
#endif // BOOST_UNITS_DIM_IMPL_HPP
 |