From e6d01ebf2b9999a6eb00a0da3266bc26a7b2402e Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Wed, 1 Feb 2012 15:02:07 +0100 Subject: tools: Add min_t, max_t, clamp and clamp_t macros Signed-off-by: Laurent Pinchart --- isp/tools.h | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'isp/tools.h') diff --git a/isp/tools.h b/isp/tools.h index b60cc2e..af29dd9 100644 --- a/isp/tools.h +++ b/isp/tools.h @@ -25,8 +25,45 @@ #define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) -#define min(a, b) ((a) < (b) ? (a) : (b)) -#define max(a, b) ((a) > (b) ? (a) : (b)) +#define min(a, b) ({ \ + typeof(a) __a = (a); \ + typeof(b) __b = (b); \ + __a < __b ? __a : __b; \ +}) + +#define min_t(type, a, b) ({ \ + type __a = (a); \ + type __b = (b); \ + __a < __b ? __a : __b; \ +}) + +#define max(a, b) ({ \ + typeof(a) __a = (a); \ + typeof(b) __b = (b); \ + __a > __b ? __a : __b; \ +}) + +#define max_t(type, a, b) ({ \ + type __a = (a); \ + type __b = (b); \ + __a > __b ? __a : __b; \ +}) + +#define clamp(val, min, max) ({ \ + typeof(val) __val = (val); \ + typeof(min) __min = (min); \ + typeof(max) __max = (max); \ + __val = __val < __min ? __min : __val; \ + __val > __max ? __max : __val; \ +}) + +#define clamp_t(type, val, min, max) ({ \ + type __val = (val); \ + type __min = (min); \ + type __max = (max); \ + __val = __val < __min ? __min : __val; \ + __val > __max ? __max : __val; \ +}) #define container_of(ptr, type, member) \ (type *)((char *)(ptr) - offsetof(type, member)) -- cgit v1.2.3