X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Falgorithm.c;h=e6b9132b0649dfc17c845eb267ff0ea3a06a1973;hb=a1887dd91b27990bba31adb888a4273379a4bf8c;hp=aaa2b8469d77ec8b8e3495b17ec0e917107f1f7b;hpb=f9d47b5bba8416419cf3bcd3aa23c2d40a05fcac;p=pspp-builds.git diff --git a/src/algorithm.c b/src/algorithm.c index aaa2b846..e6b9132b 100644 --- a/src/algorithm.c +++ b/src/algorithm.c @@ -91,18 +91,21 @@ #include #include "algorithm.h" +#include #include #include #include #include "alloc.h" -#include "random.h" - -/* Some of the assertions in this file are very expensive. If - we're optimizing, don't include them. */ -#if __OPTIMIZE__ -#define NDEBUG +#include "settings.h" + +/* Some of the assertions in this file are very expensive. We + don't use them by default. */ +#ifdef EXTRA_CHECKS +#define expensive_assert(X) assert(X) +#else +#define expensive_assert(X) ((void) 0) #endif -#include +#include "error.h" /* Finds an element in ARRAY, which contains COUNT elements of SIZE bytes each, using COMPARE for comparisons. Returns the @@ -202,7 +205,8 @@ unique (void *array, size_t count, size_t size, first += size; if (first >= last) { - assert (adjacent_find_equal (array, count, size, compare, aux) == NULL); + assert (adjacent_find_equal (array, count, + size, compare, aux) == NULL); return count; } @@ -307,7 +311,8 @@ is_partitioned (const void *array, size_t count, size_t size, unsigned algo_default_random (unsigned max, void *aux UNUSED) { - return rng_get_unsigned (pspp_rng ()) % max; + unsigned long r_min = gsl_rng_min (get_rng ()); + return (gsl_rng_get (get_rng ()) - r_min) % max; } /* Randomly reorders ARRAY, which contains COUNT elements of SIZE @@ -471,7 +476,7 @@ binary_search (const void *array, size_t count, size_t size, } } - assert (find (array, count, size, value, compare, aux) == NULL); + expensive_assert (find (array, count, size, value, compare, aux) == NULL); return NULL; } @@ -508,7 +513,10 @@ lexicographical_compare_3way (const void *array1, size_t count1, Engineering a sort function; Jon Bentley and M. Douglas McIlroy; Software - Practice and Experience; Vol. 23 (11), 1249-1265, 1993. */ +#ifdef HAVE_ALLOCA_H #include +#endif + #include #include #include @@ -825,7 +833,8 @@ push_heap (void *array, size_t count, size_t size, unsigned char *first = array; size_t i; - assert (count < 1 || is_heap (array, count - 1, size, compare, aux)); + expensive_assert (count < 1 || is_heap (array, count - 1, + size, compare, aux)); for (i = count; i > 1; i /= 2) { unsigned char *parent = first + (i / 2 - 1) * size; @@ -835,7 +844,7 @@ push_heap (void *array, size_t count, size_t size, else break; } - assert (is_heap (array, count, size, compare, aux)); + expensive_assert (is_heap (array, count, size, compare, aux)); } /* ARRAY contains COUNT elements of SIZE bytes each. Initially @@ -886,10 +895,11 @@ pop_heap (void *array, size_t count, size_t size, { unsigned char *first = array; - assert (is_heap (array, count, size, compare, aux)); + expensive_assert (is_heap (array, count, size, compare, aux)); SWAP (first, first + (count - 1) * size, size); heapify (first, count - 1, size, 1, compare, aux); - assert (count < 1 || is_heap (array, count - 1, size, compare, aux)); + expensive_assert (count < 1 || is_heap (array, count - 1, + size, compare, aux)); } /* Turns ARRAY, which contains COUNT elements of SIZE bytes, into @@ -903,7 +913,7 @@ make_heap (void *array, size_t count, size_t size, for (idx = count / 2; idx >= 1; idx--) heapify (array, count, size, idx, compare, aux); - assert (count < 1 || is_heap (array, count, size, compare, aux)); + expensive_assert (count < 1 || is_heap (array, count, size, compare, aux)); } /* ARRAY contains COUNT elements of SIZE bytes each. Initially @@ -917,13 +927,13 @@ sort_heap (void *array, size_t count, size_t size, unsigned char *first = array; size_t idx; - assert (is_heap (array, count, size, compare, aux)); + expensive_assert (is_heap (array, count, size, compare, aux)); for (idx = count; idx >= 2; idx--) { SWAP (first, first + (idx - 1) * size, size); heapify (array, idx - 1, size, 1, compare, aux); } - assert (is_sorted (array, count, size, compare, aux)); + expensive_assert (is_sorted (array, count, size, compare, aux)); } /* ARRAY contains COUNT elements of SIZE bytes each. This