mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 07:31:15 +00:00
include: kernel.h: port find_closest() from Linux
The find_closest() macro can be used to find an element in a sorted array that is closest to an input value. Bring in this macro from Linux v6.3-rc1-2-g8ca09d5fa354. Signed-off-by: Chris Packham <judge.packham@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
d87bdb82ea
commit
b5f045e12f
1 changed files with 24 additions and 0 deletions
|
@ -284,4 +284,28 @@
|
|||
offsetof(struct structure, member) == (offset), \
|
||||
"`struct " #structure "` offset for `" #member "` is not " #offset)
|
||||
|
||||
#define __find_closest(x, a, as, op) \
|
||||
({ \
|
||||
typeof(as) __fc_i, __fc_as = (as) - 1; \
|
||||
typeof(x) __fc_x = (x); \
|
||||
typeof(*a) const *__fc_a = (a); \
|
||||
for (__fc_i = 0; __fc_i < __fc_as; __fc_i++) { \
|
||||
if (__fc_x op DIV_ROUND_CLOSEST(__fc_a[__fc_i] + \
|
||||
__fc_a[__fc_i + 1], 2)) \
|
||||
break; \
|
||||
} \
|
||||
(__fc_i); \
|
||||
})
|
||||
|
||||
/**
|
||||
* find_closest - locate the closest element in a sorted array
|
||||
* @x: The reference value.
|
||||
* @a: The array in which to look for the closest element. Must be sorted
|
||||
* in ascending order.
|
||||
* @as: Size of 'a'.
|
||||
*
|
||||
* Returns the index of the element closest to 'x'.
|
||||
*/
|
||||
#define find_closest(x, a, as) __find_closest(x, a, as, <=)
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue