123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- //
- // Licensed under the terms in License.txt
- //
- // Copyright 2010 Allen Ding. All rights reserved.
- //
- #import "NSNumber+KiwiAdditions.h"
- #import "KWObjCUtilities.h"
- @implementation NSNumber(KiwiAdditions)
- #pragma mark - Creating Numbers
- + (id)numberWithBytes:(const void *)bytes objCType:(const char *)anObjCType {
- // Yeah, this is ugly.
- if (KWObjCTypeEqualToObjCType(anObjCType, @encode(BOOL)))
- return [self numberWithBoolBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(bool)))
- return [self numberWithStdBoolBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(char)))
- return [self numberWithCharBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(double)))
- return [self numberWithDoubleBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(float)))
- return [self numberWithFloatBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(int)))
- return [self numberWithIntBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(NSInteger)))
- return [self numberWithIntegerBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(long)))
- return [self numberWithLongBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(long long)))
- return [self numberWithLongLongBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(short)))
- return [self numberWithShortBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(unsigned char)))
- return [self numberWithUnsignedCharBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(unsigned int)))
- return [self numberWithUnsignedIntBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(NSUInteger)))
- return [self numberWithUnsignedIntegerBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(unsigned long)))
- return [self numberWithUnsignedLongBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(unsigned long long)))
- return [self numberWithUnsignedLongLongBytes:bytes];
- else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(unsigned short)))
- return [self numberWithUnsignedShortBytes:bytes];
- else
- return nil;
- }
- + (id)numberWithBoolBytes:(const void *)bytes {
- return @(*(const BOOL *)bytes);
- }
- + (id)numberWithStdBoolBytes:(const void *)bytes {
- return @(*(const bool *)bytes);
- }
- + (id)numberWithCharBytes:(const void *)bytes {
- return @(*(const char *)bytes);
- }
- + (id)numberWithDoubleBytes:(const void *)bytes {
- return @(*(const double *)bytes);
- }
- + (id)numberWithFloatBytes:(const void *)bytes {
- return @(*(const float *)bytes);
- }
- + (id)numberWithIntBytes:(const void *)bytes {
- return @(*(const int *)bytes);
- }
- + (id)numberWithIntegerBytes:(const void *)bytes {
- return @(*(const NSInteger *)bytes);
- }
- + (id)numberWithLongBytes:(const void *)bytes {
- return @(*(const long *)bytes);
- }
- + (id)numberWithLongLongBytes:(const void *)bytes {
- return @(*(const long long *)bytes);
- }
- + (id)numberWithShortBytes:(const void *)bytes {
- return @(*(const short *)bytes);
- }
- + (id)numberWithUnsignedCharBytes:(const void *)bytes {
- return @(*(const unsigned char *)bytes);
- }
- + (id)numberWithUnsignedIntBytes:(const void *)bytes {
- return @(*(const unsigned int *)bytes);
- }
- + (id)numberWithUnsignedIntegerBytes:(const void *)bytes {
- return @(*(const NSUInteger *)bytes);
- }
- + (id)numberWithUnsignedLongBytes:(const void *)bytes {
- return @(*(const unsigned long *)bytes);
- }
- + (id)numberWithUnsignedLongLongBytes:(const void *)bytes {
- return @(*(const unsigned long long *)bytes);
- }
- + (id)numberWithUnsignedShortBytes:(const void *)bytes {
- return @(*(const unsigned short *)bytes);
- }
- @end
|