diff -r 000000000000 -r bde4ae8d615e os/ossrv/ossrv_pub/boost_apis/boost/random/binomial_distribution.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/ossrv_pub/boost_apis/boost/random/binomial_distribution.hpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,81 @@ +/* boost random/binomial_distribution.hpp header file + * + * Copyright Jens Maurer 2002 + * 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: binomial_distribution.hpp,v 1.10 2005/06/24 22:13:43 jmaurer Exp $ + * + */ + +#ifndef BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP +#define BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP + +#include +#include +#include + +namespace boost { + +// Knuth +template +class binomial_distribution +{ +public: + typedef typename bernoulli_distribution::input_type input_type; + typedef IntType result_type; + + explicit binomial_distribution(IntType t = 1, + const RealType& p = RealType(0.5)) + : _bernoulli(p), _t(t) + { + assert(t >= 0); + assert(RealType(0) <= 0 && p <= RealType(1)); + } + + // compiler-generated copy ctor and assignment operator are fine + + IntType t() const { return _t; } + RealType p() const { return _bernoulli.p(); } + void reset() { } + + template + result_type operator()(Engine& eng) + { + // TODO: This is O(_t), but it should be O(log(_t)) for large _t + result_type n = 0; + for(IntType i = 0; i < _t; ++i) + if(_bernoulli(eng)) + ++n; + return n; + } + +#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + template + friend std::basic_ostream& + operator<<(std::basic_ostream& os, const binomial_distribution& bd) + { + os << bd._bernoulli << " " << bd._t; + return os; + } + + template + friend std::basic_istream& + operator>>(std::basic_istream& is, binomial_distribution& bd) + { + is >> std::ws >> bd._bernoulli >> std::ws >> bd._t; + return is; + } +#endif + +private: + bernoulli_distribution _bernoulli; + IntType _t; +}; + +} // namespace boost + +#endif // BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP