Hi, On 07/16/2014 01:05 PM, Ed Smith-Rowland wrote:
One thing we all forgot: the operator== is also non-trivial because it needs to compare _M_n.
Right. And reset too. I'm going to test and apply the below.
Thanks, Paolo. ///////////////////////
2014-07-16 Paolo Carlini <paolo.carl...@oracle.com> * include/ext/random: Minor formatting and cosmetic tweaks. (uniform_on_sphere_distribution<>::operator== (const uniform_on_sphere_distribution&, const uniform_on_sphere_distribution&)): Compare the _M_nds. (uniform_on_sphere_distribution<>::reset): Reset _M_nd. (operator!=(const uniform_on_sphere_distribution&, const uniform_on_sphere_distribution&)): Adjust. * include/ext/random.tcc: Minor cosmetc tweaks.
Index: include/ext/random =================================================================== --- include/ext/random (revision 212581) +++ include/ext/random (working copy) @@ -598,7 +598,7 @@ inline bool operator!=(const __gnu_cxx::beta_distribution<_RealType>& __d1, const __gnu_cxx::beta_distribution<_RealType>& __d2) - { return !(__d1 == __d2); } + { return !(__d1 == __d2); } /** @@ -2575,7 +2575,7 @@ inline bool operator!=(const __gnu_cxx::triangular_distribution<_RealType>& __d1, const __gnu_cxx::triangular_distribution<_RealType>& __d2) - { return !(__d1 == __d2); } + { return !(__d1 == __d2); } /** @@ -2810,7 +2810,7 @@ inline bool operator!=(const __gnu_cxx::von_mises_distribution<_RealType>& __d1, const __gnu_cxx::von_mises_distribution<_RealType>& __d2) - { return !(__d1 == __d2); } + { return !(__d1 == __d2); } /** @@ -3328,12 +3328,12 @@ */ explicit uniform_on_sphere_distribution() - : _M_param(), _M_n(_RealType(0), _RealType(1)) + : _M_param(), _M_nd() { } explicit uniform_on_sphere_distribution(const param_type& __p) - : _M_param(__p), _M_n(_RealType(0), _RealType(1)) + : _M_param(__p), _M_nd() { } /** @@ -3341,7 +3341,7 @@ */ void reset() - { } + { _M_nd.reset(); } /** * @brief Returns the parameter set of the distribution. @@ -3425,14 +3425,15 @@ friend bool operator==(const uniform_on_sphere_distribution& __d1, const uniform_on_sphere_distribution& __d2) - { return true; } + { return __d1._M_nd == __d2._M_nd; } /** - * @brief Inserts a %uniform_on_sphere_distribution random number distribution - * @p __x into the output stream @p __os. + * @brief Inserts a %uniform_on_sphere_distribution random number + * distribution @p __x into the output stream @p __os. * * @param __os An output stream. - * @param __x A %uniform_on_sphere_distribution random number distribution. + * @param __x A %uniform_on_sphere_distribution random number + * distribution. * * @returns The output stream with the state of @p __x inserted or in * an error state. @@ -3446,11 +3447,13 @@ __x); /** - * @brief Extracts a %uniform_on_sphere_distribution random number distribution + * @brief Extracts a %uniform_on_sphere_distribution random number + * distribution * @p __x from the input stream @p __is. * * @param __is An input stream. - * @param __x A %uniform_on_sphere_distribution random number generator engine. + * @param __x A %uniform_on_sphere_distribution random number + * generator engine. * * @returns The input stream with @p __x extracted or in an error state. */ @@ -3470,7 +3473,7 @@ const param_type& __p); param_type _M_param; - std::normal_distribution<_RealType> _M_n; + std::normal_distribution<_RealType> _M_nd; }; /** @@ -3482,7 +3485,7 @@ _RealType>& __d1, const __gnu_cxx::uniform_on_sphere_distribution<_Dimen, _RealType>& __d2) - { return false; } + { return !(__d1 == __d2); } _GLIBCXX_END_NAMESPACE_VERSION } // namespace __gnu_cxx Index: include/ext/random.tcc =================================================================== --- include/ext/random.tcc (revision 212581) +++ include/ext/random.tcc (working copy) @@ -1551,7 +1551,7 @@ _RealType __sum = _RealType(0); std::generate(__ret.begin(), __ret.end(), - [&__urng, &__sum, this](){ _RealType __t = _M_n(__urng); + [&__urng, &__sum, this](){ _RealType __t = _M_nd(__urng); __sum += __t * __t; return __t; }); auto __norm = std::sqrt(__sum); @@ -1583,8 +1583,7 @@ const __gnu_cxx::uniform_on_sphere_distribution<_Dimen, _RealType>& __x) { - // The distribution has no state, nothing to save. - return __os << __x._M_n; + return __os << __x._M_nd; } template<std::size_t _Dimen, typename _RealType, typename _CharT, @@ -1594,8 +1593,7 @@ __gnu_cxx::uniform_on_sphere_distribution<_Dimen, _RealType>& __x) { - // The distribution has no state, nothing to restore. - return __is >> __x._M_n; + return __is >> __x._M_nd; } _GLIBCXX_END_NAMESPACE_VERSION