89 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			89 lines
		
	
	
		
			2.3 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) 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_DETAIL_DIMENSIONLESS_UNIT_HPP | ||
|  | #define BOOST_UNITS_DETAIL_DIMENSIONLESS_UNIT_HPP | ||
|  | 
 | ||
|  | #include <boost/mpl/bool.hpp> | ||
|  | #include <boost/units/units_fwd.hpp> | ||
|  | 
 | ||
|  | namespace boost { | ||
|  | namespace units { | ||
|  | 
 | ||
|  | template<class T> | ||
|  | struct heterogeneous_system; | ||
|  | 
 | ||
|  | template<class T> | ||
|  | struct homogeneous_system; | ||
|  | 
 | ||
|  | template<class T1, class T2, class Scale> | ||
|  | struct heterogeneous_system_impl; | ||
|  | 
 | ||
|  | typedef boost::units::heterogeneous_system< | ||
|  |     boost::units::heterogeneous_system_impl< | ||
|  |         boost::units::dimensionless_type, | ||
|  |         boost::units::dimensionless_type, | ||
|  |         boost::units::dimensionless_type | ||
|  |     > | ||
|  | > heterogeneous_dimensionless_system; | ||
|  | 
 | ||
|  | namespace detail { | ||
|  | 
 | ||
|  | template<class System> | ||
|  | struct void_if_dimensionless { | ||
|  |     typedef int type; | ||
|  | }; | ||
|  | 
 | ||
|  | template<class T> | ||
|  | struct void_if_dimensionless<boost::units::homogeneous_system<T> > { | ||
|  |     typedef void type; | ||
|  | }; | ||
|  | 
 | ||
|  | template<> | ||
|  | struct void_if_dimensionless<heterogeneous_dimensionless_system> { | ||
|  |     typedef void type; | ||
|  | }; | ||
|  | 
 | ||
|  | template<class System, class Test = void> | ||
|  | struct void_if_heterogeneous { | ||
|  |     typedef void type; | ||
|  | }; | ||
|  | 
 | ||
|  | template<class System> | ||
|  | struct void_if_heterogeneous<System, typename void_if_dimensionless<System>::type> { | ||
|  |     typedef int type; | ||
|  | }; | ||
|  | 
 | ||
|  | template<class System, class Enable=void> | ||
|  | struct is_dimensionless_system : mpl::false_ {}; | ||
|  | 
 | ||
|  | template<class System> | ||
|  | struct is_dimensionless_system<System, typename void_if_dimensionless<System>::type> : mpl::true_ {}; | ||
|  | 
 | ||
|  | #define BOOST_UNITS_DIMENSIONLESS_UNIT(T)\ | ||
|  |     boost::units::unit<\ | ||
|  |         boost::units::dimensionless_type,\ | ||
|  |         T,\ | ||
|  |         typename ::boost::units::detail::void_if_dimensionless<T>::type\ | ||
|  |     > | ||
|  | 
 | ||
|  | #define BOOST_UNITS_HETEROGENEOUS_DIMENSIONLESS_UNIT(T)\ | ||
|  |     boost::units::unit<\ | ||
|  |         boost::units::dimensionless_type,\ | ||
|  |         T,\ | ||
|  |         typename ::boost::units::detail::void_if_heterogeneous<T>::type\ | ||
|  |     > | ||
|  | 
 | ||
|  | } | ||
|  | } | ||
|  | } | ||
|  | 
 | ||
|  | #endif |