| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | #include "host.h" |
| | #include "random.h" |
| | #include <assert.h> |
| |
|
| | #ifndef VL_SHUFFLE_prefix |
| | #error "VL_SHUFFLE_prefix must be defined" |
| | #endif |
| |
|
| | #ifndef VL_SHUFFLE_array |
| | #ifndef VL_SHUFFLE_type |
| | #error "VL_SHUFFLE_type must be defined if VL_SHUFFLE_array is not" |
| | #endif |
| | #define VL_SHUFFLE_array VL_SHUFFLE_type* |
| | #endif |
| |
|
| | #ifdef __DOXYGEN__ |
| | #define VL_SHUFFLE_prefix ShufflePrefix |
| | #define VL_SHUFFLE_type ShuffleType |
| | #define VL_SHUFFLE_array ShuffleType* |
| | #endif |
| |
|
| | |
| |
|
| | #if ! defined(VL_SHUFFLE_swap) || defined(__DOXYGEN__) |
| | #define VL_SHUFFLE_swap VL_XCAT(VL_SHUFFLE_prefix, _swap) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | VL_INLINE void |
| | VL_SHUFFLE_swap |
| | (VL_SHUFFLE_array array, |
| | vl_uindex indexA, |
| | vl_uindex indexB) |
| | { |
| | VL_SHUFFLE_type t = array [indexA] ; |
| | array [indexA] = array [indexB] ; |
| | array [indexB] = t ; |
| | } |
| |
|
| | |
| | #endif |
| |
|
| | |
| |
|
| | #if ! defined(VL_SHUFFLE_shuffle) || defined(__DOXYGEN__) |
| | #define VL_SHUFFLE_shuffle VL_XCAT(VL_SHUFFLE_prefix, _shuffle) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | VL_INLINE void |
| | VL_SHUFFLE_shuffle |
| | (VL_SHUFFLE_array array, vl_size size, VlRand * rand) |
| | { |
| | vl_uindex n = size ; |
| | while (n > 1) { |
| | vl_uindex k = vl_rand_uindex (rand, n) ; |
| | n -- ; |
| | VL_SHUFFLE_swap (array, n, k) ; |
| | } |
| | } |
| |
|
| | |
| | #endif |
| |
|
| | #undef VL_SHUFFLE_prefix |
| | #undef VL_SHUFFLE_swap |
| | #undef VL_SHUFFLE_shuffle |
| | #undef VL_SHUFFLE_type |
| | #undef VL_SHUFFLE_array |
| |
|