77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /* boost random/detail/uniform_int_float.hpp header file
 | |
|  *
 | |
|  * Copyright Jens Maurer 2000-2001
 | |
|  * Copyright Steven Watanabe 2011
 | |
|  * 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)
 | |
|  *
 | |
|  * See http://www.boost.org for most recent version including documentation.
 | |
|  *
 | |
|  * $Id$
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #ifndef BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP
 | |
| #define BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP
 | |
| 
 | |
| #include <boost/limits.hpp>
 | |
| #include <boost/config.hpp>
 | |
| #include <boost/integer.hpp>
 | |
| #include <boost/random/detail/config.hpp>
 | |
| #include <boost/random/detail/generator_bits.hpp>
 | |
| 
 | |
| #include <boost/random/detail/disable_warnings.hpp>
 | |
| 
 | |
| namespace boost {
 | |
| namespace random {
 | |
| namespace detail {
 | |
| 
 | |
| template<class URNG>
 | |
| class uniform_int_float
 | |
| {
 | |
| public:
 | |
|     typedef URNG base_type;
 | |
|     typedef typename base_type::result_type base_result;
 | |
| 
 | |
|     typedef typename boost::uint_t<
 | |
|         (std::numeric_limits<boost::uintmax_t>::digits <
 | |
|             std::numeric_limits<base_result>::digits)?
 | |
|         std::numeric_limits<boost::uintmax_t>::digits :
 | |
|         std::numeric_limits<base_result>::digits
 | |
|     >::fast result_type;
 | |
| 
 | |
|     uniform_int_float(base_type& rng)
 | |
|       : _rng(rng) {}
 | |
| 
 | |
|     static result_type min BOOST_PREVENT_MACRO_SUBSTITUTION ()
 | |
|     { return 0; }
 | |
|     static result_type max BOOST_PREVENT_MACRO_SUBSTITUTION ()
 | |
|     {
 | |
|         std::size_t digits = std::numeric_limits<result_type>::digits;
 | |
|         if(detail::generator_bits<URNG>::value() < digits) {
 | |
|             digits = detail::generator_bits<URNG>::value();
 | |
|         }
 | |
|         return (result_type(2) << (digits - 1)) - 1;
 | |
|     }
 | |
|     base_type& base() { return _rng; }
 | |
|     const base_type& base() const { return _rng; }
 | |
| 
 | |
|     result_type operator()()
 | |
|     {
 | |
|         base_result range = static_cast<base_result>((max)())+1;
 | |
|         return static_cast<result_type>(_rng() * range);
 | |
|     }
 | |
| 
 | |
| private:
 | |
|     base_type& _rng;
 | |
| };
 | |
| 
 | |
| } // namespace detail
 | |
| } // namespace random
 | |
| } // namespace boost
 | |
| 
 | |
| #include <boost/random/detail/enable_warnings.hpp>
 | |
| 
 | |
| #endif // BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP
 | 
