1
0
Эх сурвалжийг харах

* Port [3423] [3424] to 1.2.14
* Make shuffleArray templated (and use randint())



svn: 3425

Bryan Drewery 19 жил өмнө
parent
commit
76d479b648
2 өөрчлөгдсөн 7 нэмэгдсэн , 8 устгасан
  1. 5 7
      src/misc.c
  2. 2 1
      src/misc.h

+ 5 - 7
src/misc.c

@@ -1091,14 +1091,12 @@ void showhelp(int idx, struct flag_record *flags, char *string)
 }
 
 /* Arrange the N elements of ARRAY in random order. */
-void shuffleArray(char *array[], size_t n)
+template <class T>
+void shuffleArray(T array[], size_t n)
 {
-  size_t j = 0, i;
-  char *temp = NULL;
-
-  for (i = 0; i < n; i++) {
-    j = i + random() / (RAND_MAX / (n - i) + 1);
-    temp = array[j];
+  for (size_t i = 0; i < n; i++) {
+    const size_t j = randint(n);
+    T temp = array[j];
     array[j] = array[i];
     array[i] = temp;
   }

+ 2 - 1
src/misc.h

@@ -17,7 +17,8 @@ void restart(int);
 int coloridx(int);
 const char *color(int, int, int);
 void shuffle(char *, char *);
-void shuffleArray(char **, size_t);
+template <class T>
+void shuffleArray(T [], size_t);
 void showhelp(int, struct flag_record *, char *);
 char *replace(const char *, const char *, const char *);
 int goodpass(char *, int, char *);