* \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
* were mixed in an expression. \
* Even in _a and _b are of the same type, \
* if mixed in an expression the type will be \
- * promoted to int! \
- */ \
+ * (at least) promoted to int! \
+ */ \
((typeof(_a))((_a < _b) ? _a : _b)); \
})
#define MAX(a,b) ({ \
* were mixed in an expression. \
* Even in _a and _b are of the same type, \
* if mixed in an expression the type will be \
- * promoted to int! \
- */ \
+ * (at least) promoted to int! \
+ */ \
((typeof(_a))((_a > _b) ? _a : _b)); \
})
#else /* !(COMPILER_STATEMENT_EXPRESSIONS && COMPILER_TYPEOF) */
#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.
*