mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
832 B
38 lines
832 B
/* SPDX-License-Identifier: GPL-2.0 */ |
|
/** |
|
* lib/minmax.c: windowed min/max tracker by Kathleen Nichols. |
|
* |
|
*/ |
|
#ifndef MINMAX_H |
|
#define MINMAX_H |
|
|
|
#include <linux/types.h> |
|
|
|
/* A single data point for our parameterized min-max tracker */ |
|
struct minmax_sample { |
|
u32 t; /* time measurement was taken */ |
|
u32 v; /* value measured */ |
|
}; |
|
|
|
/* State for the parameterized min-max tracker */ |
|
struct minmax { |
|
struct minmax_sample s[3]; |
|
}; |
|
|
|
static inline u32 minmax_get(const struct minmax *m) |
|
{ |
|
return m->s[0].v; |
|
} |
|
|
|
static inline u32 minmax_reset(struct minmax *m, u32 t, u32 meas) |
|
{ |
|
struct minmax_sample val = { .t = t, .v = meas }; |
|
|
|
m->s[2] = m->s[1] = m->s[0] = val; |
|
return m->s[0].v; |
|
} |
|
|
|
u32 minmax_running_max(struct minmax *m, u32 win, u32 t, u32 meas); |
|
u32 minmax_running_min(struct minmax *m, u32 win, u32 t, u32 meas); |
|
|
|
#endif
|
|
|