Add macro for shuffling an array.
[bertos.git] / bertos / cfg / macros.h
index 638118b54f4bdff3b8490a57108d9db5941ccfb5..abf2057d5308d43d56593d60d0d8ed2c642ac5c4 100644 (file)
 
 #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.
  *