| 626 | // Shuffle function with custom random generator (Fisher-Yates shuffle) |
| 627 | template <typename Iterator, typename RandomGenerator> |
| 628 | void shuffle(Iterator first, Iterator last, RandomGenerator& g) FL_NOEXCEPT { |
| 629 | if (first == last) { |
| 630 | return; // Empty range, nothing to shuffle |
| 631 | } |
| 632 | |
| 633 | auto n = last - first; |
| 634 | for (auto i = n - 1; i > 0; --i) { |
| 635 | // Generate random index from 0 to i (inclusive) |
| 636 | auto j = g() % (i + 1); |
| 637 | |
| 638 | // Swap elements at positions i and j |
| 639 | swap(*(first + i), *(first + j)); |
| 640 | } |
| 641 | } |
| 642 | |
| 643 | // Shuffle function with fl::math::random instance |
| 644 | template <typename Iterator> |
no test coverage detected