/* * Xilinx Video Library - Tools * * Copyright (C) 2014-2016 Ideas on board Oy * * Contact: Laurent Pinchart * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at * your option) any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. */ #ifndef __XLNX_TOOLS_H__ #define __XLNX_TOOLS_H__ #define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) #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 div_round_up(num, denom) (((num) + (denom) - 1) / (denom)) #define container_of(ptr, type, member) \ (type *)((char *)(ptr) - offsetof(type, member)) #endif /* __XLNX_TOOLS_H__ */