mirror of
https://github.com/gnustep/libs-gdl2.git
synced 2025-04-25 05:40:55 +00:00
* EOAccess/EOAttribute.m:
o introducing new number types: ('u' for long long / int8 and 'U' for unsigned long long) * EOAdaptors/Postgres95/Postgres95Adaptor.m: o added int8, bigint * EOAdaptors/Postgres95/Postgres95Channel.m: o handling bigint o fixed types for int2 and int8 * EOAdaptors/Postgres95/Postgres95Values.m: o added missing number types o introducing new number types: ('u' for long long / int8 and 'U' for unsigned long long) * EOControl/EONSAddOns.h/m o added number accessors for NSString o added NSObject -performSelector:withObject:withObject:withObject: git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@18221 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
b536cbb410
commit
1035b7a2ed
7 changed files with 193 additions and 6 deletions
19
ChangeLog
19
ChangeLog
|
@ -1,3 +1,22 @@
|
|||
2003-11-28 Manuel Guesdon <mguesdon@orange-concept.com>
|
||||
|
||||
* EOAccess/EOAttribute.m:
|
||||
o introducing new number types:
|
||||
('u' for long long / int8 and 'U' for unsigned long long)
|
||||
* EOAdaptors/Postgres95/Postgres95Adaptor.m:
|
||||
o added int8, bigint
|
||||
* EOAdaptors/Postgres95/Postgres95Channel.m:
|
||||
o handling bigint
|
||||
o fixed types for int2 and int8
|
||||
* EOAdaptors/Postgres95/Postgres95Values.m:
|
||||
o added missing number types
|
||||
o introducing new number types:
|
||||
('u' for long long / int8 and 'U' for unsigned long long)
|
||||
* EOControl/EONSAddOns.h/m
|
||||
o added number accessors for NSString
|
||||
o added NSObject
|
||||
-performSelector:withObject:withObject:withObject:
|
||||
|
||||
2003-10-24 David Ayers <d.ayers@inode.at>
|
||||
|
||||
* EOControl/EONSAddOns.h (GDL2_BUFFER): Added experimental macro.
|
||||
|
|
|
@ -1317,6 +1317,36 @@ return nexexp
|
|||
if ([[self valueType] isEqualToString: @"i"] == YES)
|
||||
*valueP = [NSNumber numberWithInt:
|
||||
[*valueP intValue]];
|
||||
else if ([_valueType isEqualToString: @"I"] == YES)
|
||||
*valueP = [NSNumber numberWithUnsignedInt:
|
||||
[*valueP unsignedIntValue]];
|
||||
else if ([_valueType isEqualToString: @"c"] == YES)
|
||||
*valueP = [NSNumber numberWithChar:
|
||||
[*valueP intValue]];
|
||||
else if ([_valueType isEqualToString: @"C"] == YES)
|
||||
*valueP = [NSNumber numberWithUnsignedChar:
|
||||
[*valueP unsignedIntValue]];
|
||||
else if ([_valueType isEqualToString: @"s"] == YES)
|
||||
*valueP = [NSNumber numberWithShort:
|
||||
[*valueP shortValue]];
|
||||
else if ([_valueType isEqualToString: @"S"] == YES)
|
||||
*valueP = [NSNumber numberWithUnsignedShort:
|
||||
[*valueP unsignedShortValue]];
|
||||
else if ([_valueType isEqualToString: @"l"] == YES)
|
||||
*valueP = [NSNumber numberWithLong:
|
||||
[*valueP longValue]];
|
||||
else if ([_valueType isEqualToString: @"L"] == YES)
|
||||
*valueP = [NSNumber numberWithUnsignedLong:
|
||||
[*valueP unsignedLongValue]];
|
||||
else if ([_valueType isEqualToString: @"u"] == YES)
|
||||
*valueP = [NSNumber numberWithLongLong:
|
||||
[*valueP longLongValue]];
|
||||
else if ([_valueType isEqualToString: @"U"] == YES)
|
||||
*valueP = [NSNumber numberWithUnsignedLongLong:
|
||||
[*valueP unsignedLongLongValue]];
|
||||
else if ([_valueType isEqualToString: @"f"] == YES)
|
||||
*valueP = [NSNumber numberWithFloat:
|
||||
[*valueP floatValue]];
|
||||
else
|
||||
*valueP = [NSNumber numberWithDouble:
|
||||
[*valueP doubleValue]];
|
||||
|
|
|
@ -175,7 +175,7 @@ static NSString *externalTypeNames[] = {
|
|||
@"char", @"char2", @"char4", @"char8", @"char16", @"filename",
|
||||
@"date", @"reltime", @"time", @"tinterval", @"abstime", @"timestamp",
|
||||
@"real", @"double precision", @"float4", @"float8",
|
||||
@"int4", @"int2",
|
||||
@"bigint", @"int8", @"int4", @"int2",
|
||||
@"oid", @"oid8", @"oidint2", @"oidint4", @"oidchar16",
|
||||
@"varchar", @"bpchar",
|
||||
@"numeric", @"decimal", @"cid", @"tid", @"xid",
|
||||
|
@ -187,7 +187,7 @@ static NSString *internalTypeNames[] = {
|
|||
@"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber",
|
||||
@"NSCalendarDate", @"NSCalendarDate", @"NSCalendarDate", @"NSCalendarDate", @"NSCalendarDate", @"NSCalendarDate",
|
||||
@"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber",
|
||||
@"NSNumber", @"NSNumber",
|
||||
@"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber",
|
||||
@"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber",
|
||||
@"NSString", @"NSString",
|
||||
@"NSDecimalNumber", @"NSDecimalNumber", @"NSDecimalNumber", @"NSDecimalNumber", @"NSDecimalNumber",
|
||||
|
|
|
@ -1385,11 +1385,11 @@ each key
|
|||
else if ([externalName isEqual: @"float8"])
|
||||
valueClass = @"NSNumber", valueType = @"d";
|
||||
else if ([externalName isEqual: @"int2"])
|
||||
valueClass = @"NSNumber", valueType = @"i";
|
||||
valueClass = @"NSNumber", valueType = @"s";
|
||||
else if ([externalName isEqual: @"int4"])
|
||||
valueClass = @"NSNumber", valueType = @"i";
|
||||
else if ([externalName isEqual: @"int8"])
|
||||
valueClass = @"NSNumber", valueType = @"l";
|
||||
else if ([externalName isEqual: @"int8"] || [externalName isEqual: @"bigint"])
|
||||
valueClass = @"NSNumber", valueType = @"u";
|
||||
else if ([externalName isEqual: @"oid"])
|
||||
valueClass = @"NSNumber", valueType = @"l";
|
||||
else if ([externalName isEqual: @"varchar"])
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/**
|
||||
Postgres95Values.m
|
||||
|
||||
Copyright (C) 2000-2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000-2003 Free Software Foundation, Inc.
|
||||
|
||||
Author: Mirko Viviani <mirko.viviani@rccr.cremona.it
|
||||
Date: February 2000
|
||||
|
@ -54,6 +54,7 @@ RCS_ID("$Id$")
|
|||
|
||||
|
||||
#include <EOAccess/EOAttribute.h>
|
||||
#include <EOControl/EONSAddOns.h>
|
||||
|
||||
#include <Postgres95EOAdaptor/Postgres95Adaptor.h>
|
||||
#include <Postgres95EOAdaptor/Postgres95Channel.h>
|
||||
|
@ -121,6 +122,26 @@ For efficiency reasons, the returned value is NOT autoreleased !
|
|||
value = [[NSDecimalNumber alloc] initWithString: str];
|
||||
else if ([[attribute valueType] isEqualToString: @"i"])
|
||||
value = [[NSNumber alloc] initWithInt: [str intValue]];
|
||||
else if ([[attribute valueType] isEqualToString: @"I"])
|
||||
value = [[NSNumber alloc] initWithUnsignedInt: [str unsignedIntValue]];
|
||||
else if ([[attribute valueType] isEqualToString: @"c"])
|
||||
value = [[NSNumber alloc] initWithChar: [str intValue]];
|
||||
else if ([[attribute valueType] isEqualToString: @"C"])
|
||||
value = [[NSNumber alloc] numberWithUnsignedChar: [str unsignedIntValue]];
|
||||
else if ([[attribute valueType] isEqualToString: @"s"])
|
||||
value = [[NSNumber alloc] initWithShort: [str shortValue]];
|
||||
else if ([[attribute valueType] isEqualToString: @"S"])
|
||||
value = [[NSNumber alloc] initWithUnsignedShort: [str unsignedShortValue]];
|
||||
else if ([[attribute valueType] isEqualToString: @"l"])
|
||||
value = [[NSNumber alloc] initWithLong: [str longValue]];
|
||||
else if ([[attribute valueType] isEqualToString: @"L"])
|
||||
value = [[NSNumber alloc] initWithUnsignedLong: [str unsignedLongValue]];
|
||||
else if ([[attribute valueType] isEqualToString: @"u"])
|
||||
value = [[NSNumber alloc] initWithLongLong: [str longLongValue]];
|
||||
else if ([[attribute valueType] isEqualToString: @"U"])
|
||||
value = [[NSNumber alloc] initWithUnsignedLongLong: [str unsignedLongLongValue]];
|
||||
else if ([[attribute valueType] isEqualToString: @"f"])
|
||||
value = [[NSNumber alloc] initWithFloat: [str floatValue]];
|
||||
else
|
||||
value = [[NSNumber alloc] initWithDouble: [str doubleValue]];
|
||||
|
||||
|
|
|
@ -103,4 +103,29 @@ GDL2GlobalRecursiveLock();
|
|||
- (int)parsedFirstVersionSubstring;
|
||||
@end
|
||||
|
||||
//Ayers: Review
|
||||
/* Do not rely on these. */
|
||||
@interface NSString (StringToNumber)
|
||||
-(unsigned int)unsignedIntValue;
|
||||
-(short)shortValue;
|
||||
-(unsigned short)unsignedShortValue;
|
||||
-(long)longValue;
|
||||
-(unsigned long)unsignedLongValue;
|
||||
-(long long)longLongValue;
|
||||
-(unsigned long long)unsignedLongLongValue;
|
||||
@end
|
||||
|
||||
@interface NSObject (PerformSelect3)
|
||||
/**
|
||||
* Causes the receiver to execute the method implementation corresponding
|
||||
* to aSelector and returns the result.<br />
|
||||
* The method must be one which takes three arguments and returns an object.
|
||||
* <br />Raises NSInvalidArgumentException if given a null selector.
|
||||
*/
|
||||
- (id) performSelector: (SEL)aSelector
|
||||
withObject: (id) object1
|
||||
withObject: (id) object2
|
||||
withObject: (id) object3;
|
||||
|
||||
@end
|
||||
#endif /* __EONSAddOns_h__ */
|
||||
|
|
|
@ -623,3 +623,95 @@ static NSRecursiveLock *rlock = nil;
|
|||
|
||||
@end
|
||||
|
||||
@implementation NSString (StringToNumber)
|
||||
-(unsigned int)unsignedIntValue
|
||||
{
|
||||
long v=atol([self lossyCString]);
|
||||
if (v<0 || v >UINT_MAX)
|
||||
{
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
format: @"%ld is not an unsigned int",v];
|
||||
};
|
||||
return (unsigned int)v;
|
||||
};
|
||||
-(short)shortValue
|
||||
{
|
||||
int v=atoi([self lossyCString]);
|
||||
if (v<SHRT_MIN || v>SHRT_MAX)
|
||||
{
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
format: @"%d is not a short",v];
|
||||
};
|
||||
return (short)v;
|
||||
};
|
||||
-(unsigned short)unsignedShortValue;
|
||||
{
|
||||
int v=atoi([self lossyCString]);
|
||||
if (v<0 || v>USHRT_MAX)
|
||||
{
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
format: @"%d is not an unsigned short",v];
|
||||
};
|
||||
return (unsigned short)v;
|
||||
};
|
||||
|
||||
-(long)longValue
|
||||
{
|
||||
return atol([self lossyCString]);
|
||||
};
|
||||
|
||||
-(unsigned long)unsignedLongValue;
|
||||
{
|
||||
long long v=atoll([self lossyCString]);
|
||||
if (v<0 || v>ULONG_MAX)
|
||||
{
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
format: @"%lld is not an unsigned long",v];
|
||||
};
|
||||
return (unsigned long)v;
|
||||
};
|
||||
|
||||
-(long long)longLongValue
|
||||
{
|
||||
long long v=atoll([self lossyCString]);
|
||||
return v;
|
||||
};
|
||||
|
||||
-(unsigned long long)unsignedLongLongValue
|
||||
{
|
||||
return strtoull([self lossyCString],NULL,10);
|
||||
};
|
||||
|
||||
@end
|
||||
|
||||
@implementation NSObject (PerformSelect3)
|
||||
//Ayers: Review (Do we really need this?)
|
||||
/**
|
||||
* Causes the receiver to execute the method implementation corresponding
|
||||
* to aSelector and returns the result.<br />
|
||||
* The method must be one which takes three arguments and returns an object.
|
||||
* <br />Raises NSInvalidArgumentException if given a null selector.
|
||||
*/
|
||||
- (id) performSelector: (SEL)aSelector
|
||||
withObject: (id) object1
|
||||
withObject: (id) object2
|
||||
withObject: (id) object3
|
||||
{
|
||||
IMP msg;
|
||||
|
||||
if (aSelector == 0)
|
||||
[NSException raise: NSInvalidArgumentException
|
||||
format: @"%@ null selector given", NSStringFromSelector(_cmd)];
|
||||
|
||||
msg = get_imp(GSObjCClass(self), aSelector);
|
||||
if (!msg)
|
||||
{
|
||||
[NSException raise: NSGenericException
|
||||
format: @"invalid selector passed to %s", sel_get_name(_cmd)];
|
||||
return nil;
|
||||
}
|
||||
|
||||
return (*msg)(self, aSelector, object1, object2, object3);
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
Loading…
Reference in a new issue