linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Lang <dlang@diginsite.com>
To: Brad Chapman <kakadu_croc@yahoo.com>
Cc: <linux-kernel@vger.kernel.org>
Subject: Re: [IDEA+RFC] Possible solution for min()/max() war
Date: Tue, 28 Aug 2001 12:02:41 -0700 (PDT)	[thread overview]
Message-ID: <Pine.LNX.4.33.0108281201260.18348-100000@dlang.diginsite.com> (raw)
In-Reply-To: <20010828193317.96277.qmail@web10901.mail.yahoo.com>

Brad, the three arg min/max changes both values to the common type and
then compares them.

there isn't any need to have two different types becouse you then still
need to decide what the common type you are going to use for the
comparison is.

David Lang

 On Tue, 28 Aug 2001, Brad Chapman wrote:

> Date: Tue, 28 Aug 2001 12:33:17 -0700 (PDT)
> From: Brad Chapman <kakadu_croc@yahoo.com>
> To: linux-kernel@vger.kernel.org
> Subject: Re: [IDEA+RFC] Possible solution for min()/max() war
>
> Everyone,
>
> 	From reading this thread, I believe I have come up with several reasons,
> IMHO, why the old min()/max() macros were not usable:
>
> 	- They did not take into account non-typesafe comparisons
> 	- They were too generic
> 	- Some versions, IIRC, relied on typeof()
> 	- They did not take into account signed/unsigned conversions
>
> 	I have also discovered one problem with the new three-arg min()/max()
> macro: it forces both arguments to be the same, thus preventing signed/unsigned
> comparisons.
>
> 	Thus, I have a humble idea: add another type argument!
>
> 	Below is a coding example (just an example!):
>
> 	#define min(ta, a, tb, b)	((ta)(a) < (tb)(b) ? (a) : (b))
> 	#define max(ta, a, tb, b)	((ta)(a) > (tb)(b) ? (a) : (b))
>
> 	.....
> 	long int number[] = { 878593, 786831 };
> 	short int num[] = { 878, 786 };
>
> 	.....
> 	long_min = min(long int, num[0], long int, number[0]);
> 	short_min = min(short int, num[0], short int, number[0]);
>
> 	long_max = max(long int, num[1], long int, number[1]);
> 	short_max = max(short int, num[1], short int, number[1]);
>
> 	Thus, people can now cast different number types up or down, depending
> on what they need, and properly compare their sizes. The new argument also makes
> comparisons between signed/unsigned more flexible, because now you can cast
> in both directions - get a signed minimum and an unsigned minimum.
>
> 	This is an RFC. Flames, anyone? Honestly, this was one of those
> "lightbulb" ideas. If people object, I don't mind......
>
> Brad
>
> P.S: /me also wonders if I will need firehoses in my e-mail client ;)
>
> > On 28 Aug 2001, Andreas Schwab wrote:
> >
> > > Roman Zippel <zippel@linux-m68k.org> writes:
> > >
> > > |> Hi,
> > > |>
> > > |> Linus Torvalds wrote:
> > > [...]
> > > |> > You just fixed the "re-use arguments" bug - which is a bug, but doesn't
> > > |> > address the fact that most of the min/max bugs are due to the programmer
> > > |> > _indending_ a unsigned compare because he didn't even think about the
> > > |> > type.
> >
> >
> > #if 0
> > If the comparison was made unsigned, cast to the largest natural
> > value on the target, while keeping the types and sizes of the
> > input variables the same, this macro does about what 99.9999999 percent
> > of what everybody wants:
> > #endif
> >
> > #include <stdio.h>
> >
> > #define min(a,b) ((size_t)(a) < (size_t)(b) ? (a) : (b))
> >
> > int main()
> > {
> >     printf("%d\n", min(1,2));
> >     printf("%d\n", min(-1,2));
> >     printf("%d\n", min(0xffffffff,3));
> >     printf("%d\n", min(0x8000,4));
> >     printf("%d\n", min(0x7fff,5));
> >     printf("%d\n", min(0x80000000,6));
> >     printf("%d\n", min(0x7fffffff,7));
> >
> >     printf("%ld\n", min(1L,2L));
> >     printf("%ld\n", min(-1L,2L));
> >     printf("%ld\n", min(0xffffffff,3L));
> >     printf("%ld\n", min(0x8000,4L));
> >     printf("%ld\n", min(0x7fff,5L));
> >     printf("%ld\n", min(0x80000000,6L));
> >     printf("%ld\n", min(0x7fffffff,7L));
> >
> >     printf("%lu\n", min(1L,2LU));
> >     printf("%lu\n", min(-1L,2LU));
> >     printf("%lu\n", min(0xffffffff,3LU));
> >     printf("%lu\n", min(0x8000,4LU));
> >     printf("%lu\n", min(0x7fff,5LU));
> >     printf("%lu\n", min(0x80000000,6LU));
> >     printf("%lu\n", min(0x7fffffff,7LU));
> >
> >     printf("%d\n", min(-1, -2));
> >     printf("%d\n", min(-1, 0));
> >     printf("%p\n", min((void *)0x80000000, (void *)0x7fffffff));
> >     return 0;
> > }
> >
> >
> >
> > Cheers,
> > Dick Johnson
> >
> > Penguin : Linux version 2.4.1 on an i686 machine (799.53 BogoMips).
> >
> >     I was going to compile a list of innovations that could be
> >     attributed to Microsoft. Once I realized that Ctrl-Alt-Del
> >     was handled in the BIOS, I found that there aren't any.
> >
> >
> > -
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at  http://www.tux.org/lkml/
>
>
> =====
> Brad Chapman
>
> Permanent e-mail: kakadu_croc@yahoo.com
> Current e-mail: kakadu@adelphia.net
> Alternate e-mail: kakadu@netscape.net
>
> __________________________________________________
> Do You Yahoo!?
> Make international calls for as low as $.04/minute with Yahoo! Messenger
> http://phonecard.yahoo.com/
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>

  reply	other threads:[~2001-08-28 20:21 UTC|newest]

Thread overview: 158+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200108281746.f7SHk1O27199@lists.us.dell.com>
2001-08-28 19:33 ` [IDEA+RFC] Possible solution for min()/max() war Brad Chapman
2001-08-28 19:02   ` David Lang [this message]
2001-08-28 20:38     ` Brad Chapman
2001-08-28 19:25       ` David Lang
2001-08-28 20:34   ` Andreas Schwab
2001-08-28 20:42     ` Brad Chapman
2001-08-28 21:04       ` Christopher Friesen
2001-08-29  9:03       ` Helge Hafting
     [not found] <m2bskndlkt.fsf@sympatico.ca>
2001-09-07 17:39 ` Peter T. Breuer
2001-09-06  1:51 Rick Hohensee
2001-09-06 10:12 ` VDA
  -- strict thread matches above, loose matches on Subject: below --
2001-09-04 13:17 Petr Vandrovec
2001-09-04  9:09 VDA
2001-09-03 23:16 David desJardins
2001-09-03 20:35 David desJardins
2001-09-04  8:08 ` VDA
     [not found] <fa.eeq0k8v.1v28iaa@ifi.uio.no>
2001-08-31 18:40 ` Ted Unangst
2001-08-31 18:29 Andy Chou
2001-08-31 18:52 ` Roman Zippel
2001-08-31 18:24 Herbert Rosmanith
2001-08-31 18:13 Herbert Rosmanith
2001-08-31 17:41 Herbert Rosmanith
2001-08-31 17:57 ` Rik van Riel
     [not found] <fa.ehba65v.10i6abc@ifi.uio.no>
     [not found] ` <fa.odqvefv.g4k4j6@ifi.uio.no>
2001-08-31 15:45   ` ctm
2001-08-31 16:57     ` Roman Zippel
2001-08-31 14:28 Herbert Rosmanith
2001-08-31 14:37 ` Herbert Rosmanith
2001-08-31 14:28 Martin Knoblauch
2001-08-31  2:48 Rick Hohensee
2001-08-31  2:34 Andy Chou
     [not found] <20010830174227.A10673@furble>
2001-08-31  1:19 ` Peter T. Breuer
2001-08-31  2:10   ` Peter T. Breuer
2001-08-31  7:43   ` Jonathan Lundell
2001-08-31  8:27     ` Alex Bligh - linux-kernel
     [not found] <791753058.999219857@[169.254.198.40]>
2001-08-31  0:57 ` Peter T. Breuer
2001-08-30 20:44 Herbert Rosmanith
2001-08-30 21:06 ` Peter T. Breuer
2001-08-30 21:14   ` David Woodhouse
2001-08-30 21:32     ` Peter T. Breuer
2001-08-30 21:47       ` David Woodhouse
2001-08-30 21:56         ` Peter T. Breuer
2001-08-30 22:13           ` David Woodhouse
2001-08-30 22:47             ` Peter T. Breuer
2001-08-30 23:02               ` David Woodhouse
2001-08-31  0:08           ` Daniel Phillips
2001-08-30 21:49       ` Mark Zealey
2001-08-30 22:06         ` Peter T. Breuer
2001-08-30 22:14           ` Mark Zealey
2001-08-31  7:04   ` Herbert Rosmanith
2001-08-30 21:17 ` Richard B. Johnson
2001-08-30 21:45   ` Thomas Dodd
2001-08-30 21:46   ` Peter T. Breuer
2001-08-30 23:16   ` David Woodhouse
2001-08-30 23:33   ` David Wagner
2001-08-31 11:18   ` Bernd Schmidt
2001-08-30 20:35 Herbert Rosmanith
2001-08-30 17:32 mike_phillips
2001-08-30 17:45 ` Ion Badulescu
2001-08-30  9:56 Herbert Rosmanith
2001-08-30 13:09 ` Helge Hafting
     [not found] <200108291905.f7TJ59T11456@wildsau.idv-edu.uni-linz.ac.at>
2001-08-29 19:11 ` Herbert Rosmanith
2001-08-29  1:33 Ignacio Vazquez-Abrams
     [not found] <20010825024248.J8296@router.ranmachan.dyndns.org>
2001-08-25  0:54 ` Brad Chapman
     [not found] <20010825021651.I8296@router.ranmachan.dyndns.org>
2001-08-25  0:21 ` Brad Chapman
2001-08-24 22:42 Brad Chapman
2001-08-24 23:21 ` Ben LaHaise
2001-08-24 23:58   ` Brad Chapman
2001-08-25  0:13     ` Alexander Viro
2001-08-25  0:25       ` Brad Chapman
2001-08-25  0:34         ` Alexander Viro
2001-08-25  0:53           ` Brad Chapman
2001-08-25  1:15             ` Alexander Viro
2001-08-25 11:21               ` Brad Chapman
2001-08-27  0:02               ` Rusty Russell
2001-08-28  4:59                 ` Linus Torvalds
2001-08-28  5:20                   ` Alexander Viro
2001-08-28  5:51                     ` Linus Torvalds
2001-08-28 11:10                       ` Alan Cox
2001-08-28 14:15                         ` Linus Torvalds
2001-08-28 20:06                         ` John Alvord
2001-08-28 12:42                   ` Roman Zippel
2001-08-28 13:27                     ` Linus Torvalds
2001-08-28 14:19                       ` Roman Zippel
2001-08-28 15:14                         ` Linus Torvalds
2001-08-28 15:44                           ` Henning P. Schmiedehausen
2001-08-28 15:55                             ` Russell King
2001-08-28 16:05                             ` Alan Cox
2001-08-28 16:53                               ` Roman Zippel
2001-08-28 16:39                           ` Roman Zippel
2001-08-28 21:51                             ` Mike Castle
2001-08-29  0:33                           ` Daniel Phillips
2001-08-29  1:13                             ` Linus Torvalds
2001-08-29 15:42                               ` Daniel Phillips
2001-08-29 16:02                                 ` David Lang
2001-08-29 23:49                                   ` Daniel Phillips
2001-08-30  2:05                                     ` Bill Rugolsky Jr.
2001-08-30  3:28                                     ` Linus Torvalds
2001-08-30 13:10                                       ` Ion Badulescu
2001-08-30 13:17                                         ` David Woodhouse
2001-08-30 13:26                                           ` Ion Badulescu
2001-08-30 16:09                                         ` Linus Torvalds
2001-08-30 16:28                                           ` Ion Badulescu
2001-08-31 12:50                                             ` Jamie Lokier
2001-08-31 13:45                                               ` Roman Zippel
2001-08-31 16:27                                                 ` Jamie Lokier
2001-08-30 16:31                                           ` Ben LaHaise
2001-08-30 16:38                                           ` Peter T. Breuer
2001-08-30 19:51                                             ` David Weinehall
2001-08-30 20:16                                               ` Peter T. Breuer
2001-08-30 20:31                                               ` Daniel Phillips
     [not found]                                             ` <mit.lcs.mail.linux-kernel/200108301638.SAA04923@nbd.it.uc3m.es>
2001-08-30 22:42                                               ` Patrick J. LoPresti
2001-08-30 23:27                                                 ` Peter T. Breuer
2001-08-31  0:55                                                   ` Linus Torvalds
2001-08-31  1:28                                                     ` Peter T. Breuer
2001-08-31 13:22                                                     ` Peter T. Breuer
2001-08-31 14:02                                                       ` Linus Torvalds
2001-08-31 15:34                                                         ` Peter T. Breuer
2001-08-31 12:01                                                   ` Roman Zippel
2001-08-31 12:13                                                     ` Peter T. Breuer
2001-08-31 12:58                                                       ` Roman Zippel
2001-08-31 13:29                                                         ` Peter T. Breuer
2001-08-31 14:12                                                           ` Roman Zippel
2001-08-31 14:28                                                             ` Peter T. Breuer
2001-08-31 16:30                                                               ` Roman Zippel
2001-09-07  0:52                                                   ` Bill Pringlemeir
2001-09-07  7:26                                                     ` Peter T. Breuer
2001-09-07 12:28                                                       ` Horst von Brand
2001-09-07 18:03                                                         ` Mark H. Wood
2001-09-07 10:58                                                     ` Peter T. Breuer
2001-09-07 14:39                                                       ` Bill Pringlemeir
2001-09-07 15:17                                                         ` Peter T. Breuer
2001-08-30 13:49                                       ` Roman Zippel
2001-08-30 16:21                                         ` Linus Torvalds
2001-08-30 16:41                                           ` Christopher Friesen
2001-08-30 16:50                                             ` Linus Torvalds
2001-08-30 17:13                                           ` Roman Zippel
2001-08-31  1:28                                           ` Ion Badulescu
2001-08-31  5:08                                             ` Linus Torvalds
2001-08-31 12:37                                               ` Jamie Lokier
2001-08-31 13:54                                                 ` Linus Torvalds
2001-08-30 17:01                                       ` Daniel Phillips
2001-08-30 17:03                                         ` Peter T. Breuer
2001-08-30 17:26                                           ` Daniel Phillips
2001-08-31  8:04                                           ` Kai Henningsen
2001-08-30 21:16                                         ` Graham Murray
2001-08-30 21:47                                           ` David Weinehall
2001-08-31 10:10                                             ` Helge Hafting
     [not found]                                           ` <mit.lcs.mail.linux-kernel/m266b51c5c.fsf@barnowl.demon.co.uk>
2001-08-30 22:26                                             ` Patrick J. LoPresti
2001-08-28 16:09                         ` Andreas Schwab
2001-08-28 16:47                           ` Roman Zippel
2001-08-28 17:12                             ` Bill Rugolsky Jr.
2001-08-28 17:28                               ` Roman Zippel
2001-08-28 17:29                           ` Richard B. Johnson
2001-08-26 17:59             ` Bill Pringlemeir
2001-08-24 23:59   ` Brad Chapman
2001-08-25  0:07   ` David S. Miller
2001-08-25  0:18     ` Brad Chapman
2001-08-25  0:23     ` David S. Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.33.0108281201260.18348-100000@dlang.diginsite.com \
    --to=dlang@diginsite.com \
    --cc=kakadu_croc@yahoo.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).