changeset 4207:b9f1372430fa

New module minmax.
author Bruno Haible <bruno@clisp.org>
date Thu, 23 Jan 2003 18:29:34 +0000
parents 20a6a0a8a1b9
children efe029bc3c36
files ChangeLog MODULES.html.sh lib/ChangeLog lib/minmax.h modules/minmax
diffstat 5 files changed, 93 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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.
--- a/MODULES.html.sh
+++ b/MODULES.html.sh
@@ -1469,7 +1469,7 @@
 
   func_begin_table
   func_module gcd
-  #func_module minmax
+  func_module minmax
   func_end_table
 
   element="Environment variables <stdlib.h>"
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -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.
new file mode 100644
--- /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 <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 */
new file mode 100644
--- /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
+