linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Lang <david.lang@digitalinsight.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:25:32 -0700 (PDT)	[thread overview]
Message-ID: <Pine.LNX.4.33.0108281224070.18348-100000@dlang.diginsite.com> (raw)
In-Reply-To: <20010828203822.27176.qmail@web10904.mail.yahoo.com>

On Tue, 28 Aug 2001, Brad Chapman wrote:

> Mr. Lang,
>
> --- David Lang <dlang@diginsite.com> wrote:
> > Brad, the three arg min/max changes both values to the common type and
> > then compares them.
>
> 	That's the problem. It prevents you from doing varied conversions.
> My new macros allow you to do all three basic conversions (AFAICT) :
>
> 	- signed with signed
> 	- unsigned with unsigned
> 	- signed with unsigned
> 	  ^^^^^^^^^^^^^^^^^^^^
>
> 	This is the one type of conversion that the three-arg macro DOES NOT
> cover. When you provide the ability to do multiple signed/unsigned conversions
> on different sizes (signed, unsigned, long, short), then stuff becomes
> much easier.

there isn't such a thing as a signed with unsigned comparison at the
machine level (as andreas points out).

if you are thinking that there is please try and give a low level (i.e.
binary) example of how the comparison can work.

David Lang



> >
> > 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.
>
> 	What if you don't _want_ a common type? See above. IIRC, this was a major
> sticking point when Linus first changedthe macros to use a type argument; the
> new macro prevented signed/unsigned conversions. My macro defs allow that.
>
> >
> > David Lang
>
> Brad
>
> >
> >  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/
> > >
>
>
> =====
> 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/
>

  reply	other threads:[~2001-08-28 20:43 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
2001-08-28 20:38     ` Brad Chapman
2001-08-28 19:25       ` David Lang [this message]
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.0108281224070.18348-100000@dlang.diginsite.com \
    --to=david.lang@digitalinsight.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).