diff --git a/libutils/sequence.c b/libutils/sequence.c index d3821bdd863..e1d504ff066 100644 --- a/libutils/sequence.c +++ b/libutils/sequence.c @@ -235,3 +235,10 @@ size_t SeqLength(const Seq *seq) return seq->length; } +void SeqShuffle(Seq *seq, unsigned int seed) +{ + for (size_t i = 0; i < SeqLength(seq); i++) + { + Swap(&seq->data[rand_r(&seed) % SeqLength(seq)], &seq->data[rand_r(&seed) % SeqLength(seq)]); + } +} diff --git a/libutils/sequence.h b/libutils/sequence.h index a76228f9565..75d1b4b7a06 100644 --- a/libutils/sequence.h +++ b/libutils/sequence.h @@ -147,4 +147,11 @@ void SeqSoftRemove(Seq *seq, size_t index); */ void SeqReverse(Seq *seq); +/** + * @brief Shuffle the sequence by randomly switching positions of the pointers + * @param seq + * @param seed Seed value for the PRNG + */ +void SeqShuffle(Seq *seq, unsigned int seed); + #endif