121 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			121 lines
		
	
	
		
			2.1 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_DETAIL_ONE_HPP | ||
|  | #define BOOST_UNITS_DETAIL_ONE_HPP | ||
|  | 
 | ||
|  | #include <boost/units/operators.hpp> | ||
|  | 
 | ||
|  | namespace boost { | ||
|  | 
 | ||
|  | namespace units { | ||
|  | 
 | ||
|  | struct one { one() {} }; | ||
|  | 
 | ||
|  | // workaround for pathscale. | ||
|  | inline one make_one() { | ||
|  |     one result; | ||
|  |     return(result); | ||
|  | } | ||
|  | 
 | ||
|  | template<class T> | ||
|  | struct multiply_typeof_helper<one, T> | ||
|  | { | ||
|  |     typedef T type; | ||
|  | }; | ||
|  | 
 | ||
|  | template<class T> | ||
|  | struct multiply_typeof_helper<T, one> | ||
|  | { | ||
|  |     typedef T type; | ||
|  | }; | ||
|  | 
 | ||
|  | template<> | ||
|  | struct multiply_typeof_helper<one, one> | ||
|  | { | ||
|  |     typedef one type; | ||
|  | }; | ||
|  | 
 | ||
|  | template<class T> | ||
|  | inline T operator*(const one&, const T& t) | ||
|  | { | ||
|  |     return(t); | ||
|  | } | ||
|  | 
 | ||
|  | template<class T> | ||
|  | inline T operator*(const T& t, const one&) | ||
|  | { | ||
|  |     return(t); | ||
|  | } | ||
|  | 
 | ||
|  | inline one operator*(const one&, const one&) | ||
|  | { | ||
|  |     one result; | ||
|  |     return(result); | ||
|  | } | ||
|  | 
 | ||
|  | template<class T> | ||
|  | struct divide_typeof_helper<T, one> | ||
|  | { | ||
|  |     typedef T type; | ||
|  | }; | ||
|  | 
 | ||
|  | template<class T> | ||
|  | struct divide_typeof_helper<one, T> | ||
|  | { | ||
|  |     typedef T type; | ||
|  | }; | ||
|  | 
 | ||
|  | template<> | ||
|  | struct divide_typeof_helper<one, one> | ||
|  | { | ||
|  |     typedef one type; | ||
|  | }; | ||
|  | 
 | ||
|  | template<class T> | ||
|  | inline T operator/(const T& t, const one&) | ||
|  | { | ||
|  |     return(t); | ||
|  | } | ||
|  | 
 | ||
|  | template<class T> | ||
|  | inline T operator/(const one&, const T& t) | ||
|  | { | ||
|  |     return(1/t); | ||
|  | } | ||
|  | 
 | ||
|  | inline one operator/(const one&, const one&) | ||
|  | { | ||
|  |     one result; | ||
|  |     return(result); | ||
|  | } | ||
|  | 
 | ||
|  | template<class T> | ||
|  | inline bool operator>(const boost::units::one&, const T& t) { | ||
|  |     return(1 > t); | ||
|  | } | ||
|  | 
 | ||
|  | template<class T> | ||
|  | T one_to_double(const T& t) { return t; } | ||
|  | 
 | ||
|  | inline double one_to_double(const one&) { return 1.0; } | ||
|  | 
 | ||
|  | template<class T> | ||
|  | struct one_to_double_type { typedef T type; }; | ||
|  | 
 | ||
|  | template<> | ||
|  | struct one_to_double_type<one> { typedef double type; }; | ||
|  | 
 | ||
|  | } // namespace units | ||
|  | 
 | ||
|  | } // namespace boost | ||
|  | 
 | ||
|  | #endif |