From e76d9fc422698a88cee13e960154e185670861dc Mon Sep 17 00:00:00 2001 From: Lionel Debieve Date: Thu, 2 Jan 2020 11:14:16 +0100 Subject: [PATCH] lib: utils_def: add CLAMP macro Add the standard CLAMP macro. It ensures that x is between the limits set by low and high. If low is greater than high the result is undefined. Signed-off-by: Lionel Debieve Change-Id: Ia173bb9ca51bc8d9a8ec573bbc15636a94f881f4 --- include/lib/utils_def.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/lib/utils_def.h b/include/lib/utils_def.h index 35ae33a68..23f59bdc3 100644 --- a/include/lib/utils_def.h +++ b/include/lib/utils_def.h @@ -77,6 +77,15 @@ _x > _y ? _x : _y; \ }) +#define CLAMP(x, min, max) __extension__ ({ \ + __typeof__(x) _x = (x); \ + __typeof__(min) _min = (min); \ + __typeof__(max) _max = (max); \ + (void)(&_x == &_min); \ + (void)(&_x == &_max); \ + (_x > _max ? _max : (_x < _min ? _min : _x)); \ +}) + /* * The round_up() macro rounds up a value to the given boundary in a * type-agnostic yet type-safe manner. The boundary must be a power of two.