Add macro for shuffling an array.
[bertos.git] / bertos / cfg / macros.h
index dda5fe0e635a023bfc1c3cb338b9d65d0a09ff8d..abf2057d5308d43d56593d60d0d8ed2c642ac5c4 100644 (file)
@@ -33,7 +33,7 @@
  * \brief Common and handy function macros
  *
  * \version $Id$
- * \author Bernardo Innocenti <bernie@develer.com>
+ * \author Bernie Innocenti <bernie@codewiz.org>
  * \author Giovanni Bajo <rasky@develer.com>
  */
 #ifndef CFG_MACROS_H
 
 #endif /* COMPILER_TYPEOF */
 
+/**
+ * Shuffle the content of \a array that counts \a len elements.
+ */
+#define SHUFFLE(array, len) \
+       do { \
+               int i, j; \
+               for (i = (len) - 1; i > 0; i--) \
+               { \
+                       j = ((i + 1) * (rand() / (RAND_MAX + 1.0))); \
+                       SWAP((array)[i], (array)[j]); \
+               } \
+       } while (0)
+
 /**
  * Macro to swap \a a with \a b, with explicit type \a T for dumb C89 compilers.
  *
 /** Round up \a x to an even multiple of the 2's power \a pad. */
 #define ROUND_UP2(x, pad) (((x) + ((pad) - 1)) & ~((pad) - 1))
 
-/* OBSOLETE */
-#define ROUND2 ROUND_UP2
-
 /**
  * \name Integer round macros.
  *