CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
53 lines
1.9 KiB
ReStructuredText
53 lines
1.9 KiB
ReStructuredText
.. title:: clang-tidy - modernize-replace-random-shuffle
|
|
|
|
modernize-replace-random-shuffle
|
|
================================
|
|
|
|
This check will find occurrences of ``std::random_shuffle`` and replace it with
|
|
``std::shuffle``. In C++17 ``std::random_shuffle`` will no longer be available
|
|
and thus we need to replace it.
|
|
|
|
Below are two examples of what kind of occurrences will be found and two
|
|
examples of what it will be replaced with.
|
|
|
|
.. code-block:: c++
|
|
|
|
std::vector<int> v;
|
|
|
|
// First example
|
|
std::random_shuffle(vec.begin(), vec.end());
|
|
|
|
// Second example
|
|
std::random_shuffle(vec.begin(), vec.end(), randomFunc);
|
|
|
|
Both of these examples will be replaced with:
|
|
|
|
.. code-block:: c++
|
|
|
|
std::shuffle(vec.begin(), vec.end(), std::mt19937(std::random_device()()));
|
|
|
|
The second example will also receive a warning that ``randomFunc`` is no longer
|
|
supported in the same way as before so if the user wants the same
|
|
functionality, the user will need to change the implementation of the
|
|
``randomFunc``.
|
|
|
|
One thing to be aware of here is that ``std::random_device`` is quite expensive
|
|
to initialize. So if you are using the code in a performance critical place,
|
|
you probably want to initialize it elsewhere.
|
|
|
|
Another thing is that the seeding quality of the suggested fix is quite poor:
|
|
``std::mt19937`` has an internal state of 624 32-bit integers, but is only
|
|
seeded with a single integer. So if you require
|
|
higher quality randomness, you should consider seeding better, for example:
|
|
|
|
.. code-block:: c++
|
|
|
|
std::shuffle(v.begin(), v.end(), []() {
|
|
std::mt19937::result_type seeds[std::mt19937::state_size];
|
|
std::random_device device;
|
|
std::uniform_int_distribution<typename std::mt19937::result_type> dist;
|
|
std::generate(std::begin(seeds), std::end(seeds), [&] { return dist(device); });
|
|
std::seed_seq seq(std::begin(seeds), std::end(seeds));
|
|
return std::mt19937(seq);
|
|
}());
|