1 // ================================================================
2 // For mlr stats1 percentiles
3 // ================================================================
4 
5 #ifndef PERCENTILE_KEEPER_H
6 #define PERCENTILE_KEEPER_H
7 #include "lib/mlrval.h"
8 
9 typedef struct _percentile_keeper_t {
10 	mv_t* data;
11 	unsigned long long size;
12 	unsigned long long capacity;
13 	int   sorted;
14 } percentile_keeper_t;
15 
16 percentile_keeper_t* percentile_keeper_alloc();
17 void percentile_keeper_free(percentile_keeper_t* ppercentile_keeper);
18 void percentile_keeper_ingest(percentile_keeper_t* ppercentile_keeper, mv_t value);
19 
20 typedef mv_t percentile_keeper_emitter_t(percentile_keeper_t* ppercentile_keeper, double percentile);
21 mv_t percentile_keeper_emit_non_interpolated(percentile_keeper_t* ppercentile_keeper, double percentile);
22 mv_t percentile_keeper_emit_linearly_interpolated(percentile_keeper_t* ppercentile_keeper, double percentile);
23 
24 // For debug/test
25 void percentile_keeper_print(percentile_keeper_t* ppercentile_keeper);
26 
27 #endif // PERCENTILE_KEEPER_H
28