From: Bruno Haible Date: Thu, 23 Jan 2003 18:29:34 +0000 (+0000) Subject: New module minmax. X-Git-Tag: cvs-readonly~4969 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=fdaa9692bae9ae2a12d719c8597ece44cf2c25dc;p=gnulib.git New module minmax. --- diff --git a/ChangeLog b/ChangeLog index 6f7bae98b..59f16af5d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2003-01-23 Bruno Haible + + * modules/minmax: New module. + * MODULES.html.sh (func_all_modules): Add it. + 2003-01-22 Bruno Haible * modules/exit: New module. diff --git a/MODULES.html.sh b/MODULES.html.sh index e21bd17ed..69016a218 100755 --- a/MODULES.html.sh +++ b/MODULES.html.sh @@ -1469,7 +1469,7 @@ func_all_modules () func_begin_table func_module gcd - #func_module minmax + func_module minmax func_end_table element="Environment variables " diff --git a/lib/ChangeLog b/lib/ChangeLog index 3db0dc19d..a044d46f3 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2003-01-23 Bruno Haible + + * minmax.h: New file, from GNU gettext, with comments from Paul Eggert. + 2003-01-22 Bruno Haible * exit.h: New file, from GNU gettext. diff --git a/lib/minmax.h b/lib/minmax.h new file mode 100644 index 000000000..954af5736 --- /dev/null +++ b/lib/minmax.h @@ -0,0 +1,64 @@ +/* MIN, MAX macros. + Copyright (C) 1995, 1998, 2001, 2003 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program 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. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef _MINMAX_H +#define _MINMAX_H + +/* Before we define the following symbols we get the file + since otherwise we get redefinitions on some systems. */ +#include + +/* Note: MIN and MAX should preferrably be used with two arguments of the + same type. They might not return the minimum and maximum of their two + arguments, if the arguments have different types or have unusual + floating-point values. For example, on a typical host with 32-bit 'int', + 64-bit 'long long', and 64-bit IEEE 754 'double' types: + + MAX (-1, 2147483648) returns 4294967295. + MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. + MAX (NaN, 0.0) returns 0.0. + MAX (+0.0, -0.0) returns -0.0. + + and in each case the answer is in some sense bogus. */ + +/* MAX(a,b) returns the maximum of A and B. */ +#ifndef MAX +# if __STDC__ && defined __GNUC__ && __GNUC__ >= 2 +# define MAX(a,b) (__extension__ \ + ({__typeof__ (a) _a = (a); \ + __typeof__ (b) _b = (b); \ + _a > _b ? _a : _b; \ + })) +# else +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +# endif +#endif + +/* MIN(a,b) returns the minimum of A and B. */ +#ifndef MIN +# if __STDC__ && defined __GNUC__ && __GNUC__ >= 2 +# define MIN(a,b) (__extension__ \ + ({__typeof__ (a) _a = (a); \ + __typeof__ (b) _b = (b); \ + _a < _b ? _a : _b; \ + })) +# else +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +# endif +#endif + +#endif /* _MINMAX_H */ diff --git a/modules/minmax b/modules/minmax new file mode 100644 index 000000000..fb292cc38 --- /dev/null +++ b/modules/minmax @@ -0,0 +1,19 @@ +Description: +MIN, MAX macros. + +Files: +lib/minmax.h + +Depends-on: + +configure.ac: + +Makefile.am: +lib_SOURCES += minmax.h + +Include: +"minmax.h" + +Maintainer: +Bruno Haible +