+/* Shuffle */
+/**************************************/
+static int rand_int(int n);
+void xbt_dynar_shuffle_in_place(xbt_dynar_t indices_list);
+
+#define xbt_dynar_swap_elements(d, type, i, j) \
+ type tmp; \
+ tmp = xbt_dynar_get_as(indices_list, (unsigned int)j, type); \
+ xbt_dynar_set_as(indices_list, (unsigned int)j, type, \
+ xbt_dynar_get_as(indices_list, (unsigned int)i, type)); \
+ xbt_dynar_set_as(indices_list, (unsigned int)i, type, tmp);
+
+/* http://stackoverflow.com/a/3348142 */
+static int rand_int(int n)
+{
+ int limit = RAND_MAX - RAND_MAX % n;
+ int rnd;
+
+ do {
+ rnd = rand();
+ } while (rnd >= limit);
+
+ return rnd % n;
+}
+
+void xbt_dynar_shuffle_in_place(xbt_dynar_t indices_list)
+{
+ int i, j;
+
+ for (i = xbt_dynar_length(indices_list) - 1; i > 0; i--) {
+ j = rand_int(i + 1);
+ xbt_dynar_swap_elements(indices_list, int, i, j);
+ }
+}
+/**************************************/
+