From bce00ebca79e5c39a946016a66e728dbecd7ef8f Mon Sep 17 00:00:00 2001 From: CaS Date: Sat, 4 Jan 2003 10:23:21 +0000 Subject: [PATCH] Add type casts git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@15492 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++ Source/NSConcreteNumber.m | 184 ++++++++++++++++++++++++++++++++------ 2 files changed, 164 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 318923bde..56a08ce5b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-01-04 Richard Frith-Macdonald + + * Source/NSConcreteNumber.m: ([compare:]) explicitly cast to promote + values to a type where comparisons can be done without loss of + precision. + 2003-01-03 Richard Frith-Macdonald * base.make.in: diff --git a/Source/NSConcreteNumber.m b/Source/NSConcreteNumber.m index 62199c88a..f75b5a0df 100644 --- a/Source/NSConcreteNumber.m +++ b/Source/NSConcreteNumber.m @@ -213,9 +213,25 @@ BOOL oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) +#undef PT +#if (TYPE_ORDER & 1) == 1 && TYPE_ORDER < 11 +#if GS_SIZEOF_CHAR < GS_SIZEOF_SHORT +#define PT (short) +#elif GS_SIZEOF_CHAR < GS_SIZEOF_INT +#define PT (int) +#elif GS_SIZEOF_CHAR < GS_SIZEOF_LONG +#define PT (long) +#elif GS_SIZEOF_CHAR < GS_SIZEOF_LONG_LONG +#define PT (long long) +#else +#define PT (double) +#endif +#else +#define PT +#endif + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -225,9 +241,25 @@ signed char oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) +#undef PT +#if (TYPE_ORDER & 1) == 0 && TYPE_ORDER < 11 +#if GS_SIZEOF_CHAR < GS_SIZEOF_SHORT +#define PT (short) +#elif GS_SIZEOF_CHAR < GS_SIZEOF_INT +#define PT (int) +#elif GS_SIZEOF_CHAR < GS_SIZEOF_LONG +#define PT (long) +#elif GS_SIZEOF_CHAR < GS_SIZEOF_LONG_LONG +#define PT (long long) +#else +#define PT (double) +#endif +#else +#define PT +#endif + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -237,9 +269,25 @@ unsigned char oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) +#undef PT +#if (TYPE_ORDER & 1) == 1 && TYPE_ORDER < 11 +#if GS_SIZEOF_CHAR < GS_SIZEOF_SHORT +#define PT (short) +#elif GS_SIZEOF_CHAR < GS_SIZEOF_INT +#define PT (int) +#elif GS_SIZEOF_CHAR < GS_SIZEOF_LONG +#define PT (long) +#elif GS_SIZEOF_CHAR < GS_SIZEOF_LONG_LONG +#define PT (long long) +#else +#define PT (double) +#endif +#else +#define PT +#endif + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -249,9 +297,23 @@ signed short oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) +#undef PT +#if (TYPE_ORDER & 1) == 0 && TYPE_ORDER < 11 +#if GS_SIZEOF_SHORT < GS_SIZEOF_INT +#define PT (int) +#elif GS_SIZEOF_SHORT < GS_SIZEOF_LONG +#define PT (long) +#elif GS_SIZEOF_SHORT < GS_SIZEOF_LONG_LONG +#define PT (long long) +#else +#define PT (double) +#endif +#else +#define PT +#endif + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -261,9 +323,23 @@ unsigned short oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) +#undef PT +#if (TYPE_ORDER & 1) == 1 && TYPE_ORDER < 11 +#if GS_SIZEOF_SHORT < GS_SIZEOF_INT +#define PT (int) +#elif GS_SIZEOF_SHORT < GS_SIZEOF_LONG +#define PT (long) +#elif GS_SIZEOF_SHORT < GS_SIZEOF_LONG_LONG +#define PT (long long) +#else +#define PT (double) +#endif +#else +#define PT +#endif + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -273,9 +349,21 @@ signed int oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) +#undef PT +#if (TYPE_ORDER & 1) == 0 && TYPE_ORDER < 11 +#if GS_SIZEOF_INT < GS_SIZEOF_LONG +#define PT (long) +#elif GS_SIZEOF_INT < GS_SIZEOF_LONG_LONG +#define PT (long long) +#else +#define PT (double) +#endif +#else +#define PT +#endif + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -285,9 +373,21 @@ unsigned int oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) +#undef PT +#if (TYPE_ORDER & 1) == 1 && TYPE_ORDER < 11 +#if GS_SIZEOF_INT < GS_SIZEOF_LONG +#define PT (long) +#elif GS_SIZEOF_INT < GS_SIZEOF_LONG_LONG +#define PT (long long) +#else +#define PT (double) +#endif +#else +#define PT +#endif + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -297,9 +397,19 @@ signed long oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) +#undef PT +#if (TYPE_ORDER & 1) == 0 && TYPE_ORDER < 11 +#if GS_SIZEOF_LONG < GS_SIZEOF_LONG_LONG +#define PT (long long) +#else +#define PT (double) +#endif +#else +#define PT +#endif + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -309,9 +419,19 @@ unsigned long oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) +#undef PT +#if (TYPE_ORDER & 1) == 1 && TYPE_ORDER < 11 +#if GS_SIZEOF_LONG < GS_SIZEOF_LONG_LONG +#define PT (long long) +#else +#define PT (double) +#endif +#else +#define PT +#endif + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -321,9 +441,15 @@ signed long long oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) +#undef PT +#if (TYPE_ORDER & 1) == 0 && TYPE_ORDER < 11 +#define PT (double) +#else +#define PT +#endif + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -333,9 +459,15 @@ unsigned long long oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) +#undef PT +#if (TYPE_ORDER & 1) == 1 && TYPE_ORDER < 11 +#define PT (double) +#else +#define PT +#endif + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -345,9 +477,9 @@ float oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending; @@ -357,9 +489,9 @@ double oData; (*(info->getValue))(other, @selector(getValue:), (void*)&oData); - if (data == oData) + if (PT data == PT oData) return NSOrderedSame; - else if (data < oData) + else if (PT data < PT oData) return NSOrderedAscending; else return NSOrderedDescending;