tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

order.h (1877B)


      1 /* Copyright (c) 2003-2004, Roger Dingledine
      2 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
      3 * Copyright (c) 2007-2021, The Tor Project, Inc. */
      4 /* See LICENSE for licensing information */
      5 
      6 #ifndef TOR_ORDER_H
      7 #define TOR_ORDER_H
      8 
      9 /**
     10 * \file order.h
     11 *
     12 * \brief Header for order.c.
     13 **/
     14 
     15 #include "lib/cc/compat_compiler.h"
     16 #include "lib/cc/torint.h"
     17 
     18 /* These functions, given an <b>array</b> of <b>n_elements</b>, return the
     19 * <b>nth</b> lowest element. <b>nth</b>=0 gives the lowest element;
     20 * <b>n_elements</b>-1 gives the highest; and (<b>n_elements</b>-1) / 2 gives
     21 * the median.  As a side effect, the elements of <b>array</b> are sorted. */
     22 int find_nth_int(int *array, int n_elements, int nth);
     23 time_t find_nth_time(time_t *array, int n_elements, int nth);
     24 double find_nth_double(double *array, int n_elements, int nth);
     25 int32_t find_nth_int32(int32_t *array, int n_elements, int nth);
     26 uint32_t find_nth_uint32(uint32_t *array, int n_elements, int nth);
     27 long find_nth_long(long *array, int n_elements, int nth);
     28 static inline int
     29 median_int(int *array, int n_elements)
     30 {
     31  return find_nth_int(array, n_elements, (n_elements-1)/2);
     32 }
     33 static inline time_t
     34 median_time(time_t *array, int n_elements)
     35 {
     36  return find_nth_time(array, n_elements, (n_elements-1)/2);
     37 }
     38 static inline double
     39 median_double(double *array, int n_elements)
     40 {
     41  return find_nth_double(array, n_elements, (n_elements-1)/2);
     42 }
     43 static inline uint32_t
     44 median_uint32(uint32_t *array, int n_elements)
     45 {
     46  return find_nth_uint32(array, n_elements, (n_elements-1)/2);
     47 }
     48 static inline int32_t
     49 median_int32(int32_t *array, int n_elements)
     50 {
     51  return find_nth_int32(array, n_elements, (n_elements-1)/2);
     52 }
     53 
     54 static inline uint32_t
     55 third_quartile_uint32(uint32_t *array, int n_elements)
     56 {
     57  return find_nth_uint32(array, n_elements, (n_elements*3)/4);
     58 }
     59 
     60 #endif /* !defined(TOR_ORDER_H) */