New module minmax.
authorBruno Haible <bruno@clisp.org>
Thu, 23 Jan 2003 18:29:34 +0000 (18:29 +0000)
committerBruno Haible <bruno@clisp.org>
Thu, 23 Jan 2003 18:29:34 +0000 (18:29 +0000)
ChangeLog
MODULES.html.sh
lib/ChangeLog
lib/minmax.h [new file with mode: 0644]
modules/minmax [new file with mode: 0644]

index 6f7bae9..59f16af 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-01-23  Bruno Haible  <bruno@clisp.org>
+
+       * modules/minmax: New module.
+       * MODULES.html.sh (func_all_modules): Add it.
+
 2003-01-22  Bruno Haible  <bruno@clisp.org>
 
        * modules/exit: New module.
index e21bd17..69016a2 100755 (executable)
@@ -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 <stdlib.h>"
index 3db0dc1..a044d46 100644 (file)
@@ -1,3 +1,7 @@
+2003-01-23  Bruno Haible  <bruno@clisp.org>
+
+       * minmax.h: New file, from GNU gettext, with comments from Paul Eggert.
+
 2003-01-22  Bruno Haible  <bruno@clisp.org>
 
        * exit.h: New file, from GNU gettext.
diff --git a/lib/minmax.h b/lib/minmax.h
new file mode 100644 (file)
index 0000000..954af57
--- /dev/null
@@ -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 <limits.h> file
+   since otherwise we get redefinitions on some systems.  */
+#include <limits.h>
+
+/* 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 (file)
index 0000000..fb292cc
--- /dev/null
@@ -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
+