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 |