Index: src/OFNumber.h ================================================================== --- src/OFNumber.h +++ src/OFNumber.h @@ -34,10 +34,11 @@ OF_NUMBER_SSIZE, OF_NUMBER_INTMAX, OF_NUMBER_UINTMAX, OF_NUMBER_PTRDIFF, OF_NUMBER_INTPTR, + OF_NUMBER_UINTPTR, OF_NUMBER_FLOAT, OF_NUMBER_DOUBLE, }; /** @@ -66,10 +67,11 @@ ssize_t ssize; intmax_t intmax; uintmax_t uintmax; ptrdiff_t ptrdiff; intptr_t intptr; + uintptr_t uintptr; float float_; double double_; } value; enum of_number_type type; } @@ -204,10 +206,16 @@ * \param intptr An intptr_t which the OFNumber should contain * \return A new autoreleased OFNumber */ + numberWithIntPtr: (intptr_t)intptr; +/** + * \param uintptr An uintptr_t which the OFNumber should contain + * \return A new autoreleased OFNumber + */ ++ numberWithUIntPtr: (uintptr_t)uintptr; + /** * \param float_ A float which the OFNumber should contain * \return A new autoreleased OFNumber */ + numberWithFloat: (float)float_; @@ -392,10 +400,18 @@ * \param intptr An intptr_t which the OFNumber should contain * \return An initialized OFNumber */ - initWithIntPtr: (intptr_t)intptr; +/** + * Initializes an already allocated OFNumber with the specified uintptr_t. + * + * \param uintptr An uintptr_t which the OFNumber should contain + * \return An initialized OFNumber + */ +- initWithUIntPtr: (uintptr_t)uintptr; + /** * Initializes an already allocated OFNumber with the specified float. * * \param float_ A float which the OFNumber should contain * \return An initialized OFNumber @@ -524,10 +540,15 @@ /** * \return The OFNumber as an intptr_t */ - (intptr_t)asIntPtr; +/** + * \return The OFNumber as an uintptr_t + */ +- (uintptr_t)asUIntPtr; + /** * \return The OFNumber as a float */ - (float)asFloat; Index: src/OFNumber.m ================================================================== --- src/OFNumber.m +++ src/OFNumber.m @@ -59,10 +59,12 @@ return (t)value.uintmax; \ case OF_NUMBER_PTRDIFF: \ return (t)value.ptrdiff; \ case OF_NUMBER_INTPTR: \ return (t)value.intptr; \ + case OF_NUMBER_UINTPTR: \ + return (t)value.uintptr; \ case OF_NUMBER_FLOAT: \ return (t)value.float_; \ case OF_NUMBER_DOUBLE: \ return (t)value.double_; \ default: \ @@ -134,10 +136,13 @@ return [OFNumber numberWithPtrDiff: \ value.ptrdiff o [n asPtrDiff]]; \ case OF_NUMBER_INTPTR: \ return [OFNumber numberWithIntPtr: \ value.intptr o [n asIntPtr]]; \ + case OF_NUMBER_UINTPTR: \ + return [OFNumber numberWithUIntPtr: \ + value.uintptr o [n asUIntPtr]]; \ case OF_NUMBER_FLOAT: \ return [OFNumber numberWithFloat: \ value.float_ o [n asFloat]]; \ case OF_NUMBER_DOUBLE: \ return [OFNumber numberWithDouble: \ @@ -211,10 +216,13 @@ return [OFNumber numberWithPtrDiff: \ value.ptrdiff o [n asPtrDiff]]; \ case OF_NUMBER_INTPTR: \ return [OFNumber numberWithIntPtr: \ value.intptr o [n asIntPtr]]; \ + case OF_NUMBER_UINTPTR: \ + return [OFNumber numberWithUIntPtr: \ + value.uintptr o [n asUIntPtr]]; \ case OF_NUMBER_FLOAT: \ case OF_NUMBER_DOUBLE: \ @throw [OFNotImplementedException newWithClass: isa \ selector: _cmd]; \ default: \ @@ -264,10 +272,12 @@ return [OFNumber numberWithUIntMax: value.uintmax o]; \ case OF_NUMBER_PTRDIFF: \ return [OFNumber numberWithPtrDiff: value.ptrdiff o]; \ case OF_NUMBER_INTPTR: \ return [OFNumber numberWithIntPtr: value.intptr o]; \ + case OF_NUMBER_UINTPTR: \ + return [OFNumber numberWithUIntPtr: value.uintptr o]; \ case OF_NUMBER_FLOAT: \ return [OFNumber numberWithFloat: value.float_ o]; \ case OF_NUMBER_DOUBLE: \ return [OFNumber numberWithDouble: value.double_ o]; \ default: \ @@ -382,10 +392,15 @@ + numberWithIntPtr: (intptr_t)intptr { return [[[self alloc] initWithIntPtr: intptr] autorelease]; } + ++ numberWithUIntPtr: (uintptr_t)uintptr +{ + return [[[self alloc] initWithUIntPtr: uintptr] autorelease]; +} + numberWithFloat: (float)float_ { return [[[self alloc] initWithFloat: float_] autorelease]; } @@ -618,10 +633,20 @@ value.intptr = intptr; type = OF_NUMBER_INTPTR; return self; } + +- initWithUIntPtr: (uintptr_t)uintptr +{ + self = [super init]; + + value.uintptr = uintptr; + type = OF_NUMBER_UINTPTR; + + return self; +} - initWithFloat: (float)float_ { self = [super init]; @@ -753,10 +778,15 @@ - (intptr_t)asIntPtr { RETURN_AS(intptr_t) } + +- (uintptr_t)asUIntPtr +{ + RETURN_AS(uintptr_t) +} - (float)asFloat { RETURN_AS(float) } @@ -794,10 +824,11 @@ case OF_NUMBER_UINT32: case OF_NUMBER_UINT64: case OF_NUMBER_SIZE: case OF_NUMBER_UINTMAX: case OF_NUMBER_INTPTR: + case OF_NUMBER_UINTPTR: return ([(OFNumber*)obj asUIntMax] == [self asUIntMax] ? YES : NO); case OF_NUMBER_FLOAT: case OF_NUMBER_DOUBLE: return ([(OFNumber*)obj asDouble] == [self asDouble]