Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[oneDPL][RNG] Changing type of internal parameter of discard_block_engine #651

Merged
merged 2 commits into from
Oct 24, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 15 additions & 10 deletions include/oneapi/dpl/internal/random_impl/discard_block_engine.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,18 @@
#ifndef _ONEDPL_DISCARD_BLOCK_ENGINE
#define _ONEDPL_DISCARD_BLOCK_ENGINE

#include <cstddef>
#include <utility>
#include <type_traits>

#include "random_common.h"

namespace oneapi
{
namespace dpl
{

template <class _Engine, size_t _P, size_t _R>
template <class _Engine, ::std::size_t _P, ::std::size_t _R>
class discard_block_engine
{
public:
Expand All @@ -34,8 +40,8 @@ class discard_block_engine
using scalar_type = internal::element_type_t<result_type>;

// Engine characteristics
static constexpr size_t block_size = _P;
static constexpr size_t used_block = _R;
static constexpr ::std::size_t block_size = _P;
static constexpr ::std::size_t used_block = _R;
static constexpr scalar_type
min()
{
Expand Down Expand Up @@ -129,15 +135,14 @@ class discard_block_engine

private:
// Static asserts
static_assert((0 < _R) && (_R <= _P) && (_R <= std::numeric_limits<int>::max()),
"oneapi::dpl::discard_block_engine. Error: unsupported parameters");
static_assert((0 < _R) && (_R <= _P), "oneapi::dpl::discard_block_engine. Error: unsupported parameters");

// Function for state adjustment
template <int _N>
typename ::std::enable_if<(_N == 0), scalar_type>::type
generate_internal_scalar()
{
if (n_ >= static_cast<int>(used_block))
if (n_ >= used_block)
{
engine_.discard(static_cast<unsigned long long>(block_size - used_block));
n_ = 0;
Expand All @@ -150,7 +155,7 @@ class discard_block_engine
typename ::std::enable_if<(N > 0), scalar_type>::type
generate_internal_scalar()
{
if (n_ >= static_cast<int>(used_block))
if (n_ >= used_block)
{
engine_.discard(static_cast<unsigned long long>(block_size - used_block));
n_ = 0;
Expand All @@ -172,10 +177,10 @@ class discard_block_engine
generate_internal()
{
result_type __res;
if (_N < (used_block - n_))
if (static_cast<::std::size_t>(_N) < (used_block - n_))
{
__res = engine_();
n_ += _N;
n_ += static_cast<::std::size_t>(_N);
}
else
{
Expand Down Expand Up @@ -205,7 +210,7 @@ class discard_block_engine
}

_Engine engine_;
int n_ = 0;
::std::size_t n_ = 0;
};

} // namespace dpl
Expand Down