summaryrefslogtreecommitdiff
path: root/src/common/container.h
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2007-09-17 18:27:49 +0000
committerNick Mathewson <nickm@torproject.org>2007-09-17 18:27:49 +0000
commit8c139678038832cf982ab2ef3a25679ff677c491 (patch)
tree67036be82e4014a736d44aa36fb9d794ddb54985 /src/common/container.h
parent93d4ad974318f48b4def653f94d7088bdc6b4e09 (diff)
downloadtor-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.h29
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