diff options
author | Nick Mathewson <nickm@torproject.org> | 2007-09-17 18:27:49 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2007-09-17 18:27:49 +0000 |
commit | 8c139678038832cf982ab2ef3a25679ff677c491 (patch) | |
tree | 67036be82e4014a736d44aa36fb9d794ddb54985 /src/common/container.h | |
parent | 93d4ad974318f48b4def653f94d7088bdc6b4e09 (diff) | |
download | tor-8c139678038832cf982ab2ef3a25679ff677c491.tar.gz tor-8c139678038832cf982ab2ef3a25679ff677c491.zip |
r14448@Kushana: nickm | 2007-09-17 14:26:56 -0400
Unify all of the divergent median/nth-percentile code in container.[ch]
svn:r11457
Diffstat (limited to 'src/common/container.h')
-rw-r--r-- | src/common/container.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/common/container.h b/src/common/container.h index 668befdd6e..1f58b30557 100644 --- a/src/common/container.h +++ b/src/common/container.h @@ -310,5 +310,34 @@ bitarray_is_set(bitarray_t *b, int bit) return b[bit >> BITARRAY_SHIFT] & (1u << (bit & BITARRAY_MASK)); } +/* These functions, given an <b>array</b> of <b>n_elements</b>, return the + * <b>nth</b> lowest element. <b>nth</b>=0 gives the lowest element; + * <b>n_elements</b>-1 gives the highest; and (<b>n_elements</b>-1) / 2 gives + * the median. As a side effect, the elements of <b>array</b> are sorted. */ +int find_nth_int(int *array, int n_elements, int nth); +time_t find_nth_time(time_t *array, int n_elements, int nth); +double find_nth_double(double *array, int n_elements, int nth); +uint32_t find_nth_uint32(uint32_t *array, int n_elements, int nth); +static INLINE int +median_int(int *array, int n_elements) +{ + return find_nth_int(array, n_elements, (n_elements-1)/2); +} +static INLINE time_t +median_time(time_t *array, int n_elements) +{ + return find_nth_time(array, n_elements, (n_elements-1)/2); +} +static INLINE double +median_double(double *array, int n_elements) +{ + return find_nth_double(array, n_elements, (n_elements-1)/2); +} +static INLINE uint32_t +median_uint32(uint32_t *array, int n_elements) +{ + return find_nth_uint32(array, n_elements, (n_elements-1)/2); +} + #endif |