1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-11-01 08:47:24 -04:00
elinks/src/util/math.h
Kalle Olavi Niemitalo 7c80c67759 Don't include <sys/param.h> in util/math for MAX/MIN
<sys/param.h> includes <linux/param.h>, which includes <asm/param.h>, which
includes <asm-i486/param.h>, which includes <linux/config.h>, which
includes <linux/autoconf.h>, which includes <asm-i486/autoconf.h>, which
undefines CONFIG_IPV6.
2006-01-09 02:09:59 +01:00

77 lines
1.5 KiB
C

#ifndef EL__UTIL_MATH_H
#define EL__UTIL_MATH_H
/* It's evil to include this directly, elinks.h includes it for you
* at the right time. */
/* These macros will evaluate twice their arguments.
* Ie. MIN(a+b, c+d) will do 3 additions...
* Please prefer to use int_min() and int_max() if possible. */
/* FreeBSD needs this. */
#ifdef MIN
#undef MIN
#endif
#ifdef MAX
#undef MAX
#endif
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define MAX(x, y) ((x) > (y) ? (x) : (y))
static inline int
int_min(register int x, register int y)
{
if (x < y) return x;
return y;
}
static inline int
int_max(register int x, register int y)
{
if (x > y) return x;
return y;
}
/* Limit @what pointed value to upper bound @limit. */
static inline void
int_upper_bound(register int *what, register int limit)
{
if (*what > limit) *what = limit;
}
/* Limit @what pointed value to lower bound @limit. */
static inline void
int_lower_bound(register int *what, register int limit)
{
if (*what < limit) *what = limit;
}
/* Limit @what pointed value to lower bound @lower_limit and to upper bound
* @upper_limit. */
static inline void
int_bounds(register int *what, register int lower_limit,
register int upper_limit)
{
if (*what < lower_limit)
*what = lower_limit;
else if (*what > upper_limit)
*what = upper_limit;
}
/* This is supposed to evaluate at compile time, giving no performance hit. */
#define swap_values(type, a, b) \
do { \
type swap_register_ = (a); \
(a) = (b); \
(b) = (swap_register_); \
} while (0)
#endif