@@ -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]