From 5bcb3b4d80d9d973acafe9d5a1c12d151b4b99fa Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 2 Nov 2012 10:45:25 +0000 Subject: re PR libstdc++/55169 (std::discrete_distribution::operator(generator&) makes unnecessary copy of parameter vector) 2012-11-02 Paolo Carlini PR libstdc++/55169 * include/bits/random.h: Remove all uses of param(). (chi_squared_distribution<>::__generate_impl(_ForwardIterator, _ForwardIterator, _UniformRandomNumberGenerator&): Declare * include/bits/random.tcc: ... define. * include/ext/random: Remove all uses of param(). From-SVN: r193092 --- libstdc++-v3/include/ext/random | 53 ++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 27 deletions(-) (limited to 'libstdc++-v3/include/ext/random') diff --git a/libstdc++-v3/include/ext/random b/libstdc++-v3/include/ext/random index adf8a24..79ee599 100644 --- a/libstdc++-v3/include/ext/random +++ b/libstdc++-v3/include/ext/random @@ -510,7 +510,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template result_type operator()(_UniformRandomNumberGenerator& __urng) - { return this->operator()(__urng, this->param()); } + { return this->operator()(__urng, _M_param); } template result_type @@ -522,7 +522,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void __generate(_ForwardIterator __f, _ForwardIterator __t, _UniformRandomNumberGenerator& __urng) - { this->__generate(__f, __t, __urng, this->param()); } + { this->__generate(__f, __t, __urng, _M_param); } template @@ -540,6 +540,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { this->__generate_impl(__f, __t, __urng, __p); } /** + * @brief Return true if two beta distributions have the same + * parameters and the sequences that would be generated + * are equal. + */ + friend bool + operator==(const beta_distribution& __d1, + const beta_distribution& __d2) + { return __d1._M_param == __d2._M_param; } + + /** * @brief Inserts a %beta_distribution random number distribution * @p __x into the output stream @p __os. * @@ -580,17 +590,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; /** - * @brief Return true if two beta distributions have the same - * parameters and the sequences that would be generated - * are equal. - */ - template - inline bool - operator==(const __gnu_cxx::beta_distribution<_RealType>& __d1, - const __gnu_cxx::beta_distribution<_RealType>& __d2) - { return __d1.param() == __d2.param(); } - - /** * @brief Return true if two beta distributions are different. */ template @@ -809,7 +808,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template result_type operator()(_UniformRandomNumberGenerator& __urng) - { return this->operator()(__urng, this->param()); } + { return this->operator()(__urng, _M_param); } template result_type @@ -821,7 +820,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void __generate(_ForwardIterator __f, _ForwardIterator __t, _UniformRandomNumberGenerator& __urng) - { return this->__generate_impl(__f, __t, __urng, this->param()); } + { return this->__generate_impl(__f, __t, __urng, _M_param); } template @@ -1073,7 +1072,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void __generate(_ForwardIterator __f, _ForwardIterator __t, _UniformRandomNumberGenerator& __urng) - { this->__generate(__f, __t, __urng, this->param()); } + { this->__generate(__f, __t, __urng, _M_param); } template @@ -1098,7 +1097,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend bool operator==(const rice_distribution& __d1, const rice_distribution& __d2) - { return (__d1.param() == __d2.param() + { return (__d1._M_param == __d2._M_param && __d1._M_ndx == __d2._M_ndx && __d1._M_ndy == __d2._M_ndy); } @@ -1296,7 +1295,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void __generate(_ForwardIterator __f, _ForwardIterator __t, _UniformRandomNumberGenerator& __urng) - { this->__generate(__f, __t, __urng, this->param()); } + { this->__generate(__f, __t, __urng, _M_param); } template @@ -1321,7 +1320,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend bool operator==(const nakagami_distribution& __d1, const nakagami_distribution& __d2) - { return (__d1.param() == __d2.param() + { return (__d1._M_param == __d2._M_param && __d1._M_gd == __d2._M_gd); } /** @@ -1532,7 +1531,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void __generate(_ForwardIterator __f, _ForwardIterator __t, _UniformRandomNumberGenerator& __urng) - { this->__generate(__f, __t, __urng, this->param()); } + { this->__generate(__f, __t, __urng, _M_param); } template @@ -1557,7 +1556,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend bool operator==(const pareto_distribution& __d1, const pareto_distribution& __d2) - { return (__d1.param() == __d2.param() + { return (__d1._M_param == __d2._M_param && __d1._M_ud == __d2._M_ud); } /** @@ -1774,7 +1773,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void __generate(_ForwardIterator __f, _ForwardIterator __t, _UniformRandomNumberGenerator& __urng) - { this->__generate(__f, __t, __urng, this->param()); } + { this->__generate(__f, __t, __urng, _M_param); } template @@ -1799,7 +1798,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend bool operator==(const k_distribution& __d1, const k_distribution& __d2) - { return (__d1.param() == __d2.param() + { return (__d1._M_param == __d2._M_param && __d1._M_gd1 == __d2._M_gd1 && __d1._M_gd2 == __d2._M_gd2); } @@ -2006,7 +2005,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void __generate(_ForwardIterator __f, _ForwardIterator __t, _UniformRandomNumberGenerator& __urng) - { this->__generate(__f, __t, __urng, this->param()); } + { this->__generate(__f, __t, __urng, _M_param); } template @@ -2031,7 +2030,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend bool operator==(const arcsine_distribution& __d1, const arcsine_distribution& __d2) - { return (__d1.param() == __d2.param() + { return (__d1._M_param == __d2._M_param && __d1._M_ud == __d2._M_ud); } /** @@ -2241,7 +2240,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void __generate(_ForwardIterator __f, _ForwardIterator __t, _UniformRandomNumberGenerator& __urng) - { this->__generate(__f, __t, __urng, this->param()); } + { this->__generate(__f, __t, __urng, _M_param); } template @@ -2266,7 +2265,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend bool operator==(const hoyt_distribution& __d1, const hoyt_distribution& __d2) - { return (__d1.param() == __d2.param() + { return (__d1._M_param == __d2._M_param && __d1._M_ad == __d2._M_ad && __d1._M_ed == __d2._M_ed); } -- cgit v1.1