main
  1//
  2// Licensed under the terms in License.txt
  3//
  4// Copyright 2010 Allen Ding. All rights reserved.
  5//
  6
  7#import "NSNumber+KiwiAdditions.h"
  8#import "KWObjCUtilities.h"
  9
 10@implementation NSNumber(KiwiAdditions)
 11
 12#pragma mark -
 13#pragma mark Creating Numbers
 14
 15+ (id)numberWithBytes:(const void *)bytes objCType:(const char *)anObjCType {
 16    // Yeah, this is ugly.
 17    if (KWObjCTypeEqualToObjCType(anObjCType, @encode(BOOL)))
 18        return [self numberWithBoolBytes:bytes];
 19    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(char)))
 20        return [self numberWithCharBytes:bytes];
 21    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(double)))
 22        return [self numberWithDoubleBytes:bytes];
 23    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(float)))
 24        return [self numberWithFloatBytes:bytes];
 25    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(int)))
 26        return [self numberWithIntBytes:bytes];
 27    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(NSInteger)))
 28        return [self numberWithIntegerBytes:bytes];
 29    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(long)))
 30        return [self numberWithLongBytes:bytes];
 31    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(long long)))
 32        return [self numberWithLongLongBytes:bytes];
 33    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(short)))
 34        return [self numberWithShortBytes:bytes];
 35    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(unsigned char)))
 36        return [self numberWithUnsignedCharBytes:bytes];
 37    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(unsigned int)))
 38        return [self numberWithUnsignedIntBytes:bytes];
 39    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(NSUInteger)))
 40        return [self numberWithUnsignedIntegerBytes:bytes];
 41    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(unsigned long)))
 42        return [self numberWithUnsignedLongBytes:bytes];
 43    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(unsigned long long)))
 44        return [self numberWithUnsignedLongLongBytes:bytes];
 45    else if (KWObjCTypeEqualToObjCType(anObjCType, @encode(unsigned short)))
 46        return [self numberWithUnsignedShortBytes:bytes];
 47    else
 48        return nil;
 49}
 50
 51+ (id)numberWithBoolBytes:(const void *)bytes {
 52    return @(*(const BOOL *)bytes);
 53}
 54
 55+ (id)numberWithCharBytes:(const void *)bytes {
 56    return @(*(const char *)bytes);
 57}
 58
 59+ (id)numberWithDoubleBytes:(const void *)bytes {
 60    return @(*(const double *)bytes);
 61}
 62
 63+ (id)numberWithFloatBytes:(const void *)bytes {
 64    return @(*(const float *)bytes);
 65}
 66
 67+ (id)numberWithIntBytes:(const void *)bytes {
 68    return @(*(const int *)bytes);
 69}
 70
 71+ (id)numberWithIntegerBytes:(const void *)bytes {
 72    return @(*(const NSInteger *)bytes);
 73}
 74
 75+ (id)numberWithLongBytes:(const void *)bytes {
 76    return @(*(const long *)bytes);
 77}
 78
 79+ (id)numberWithLongLongBytes:(const void *)bytes {
 80    return @(*(const long long *)bytes);
 81}
 82
 83+ (id)numberWithShortBytes:(const void *)bytes {
 84    return @(*(const short *)bytes);
 85}
 86
 87+ (id)numberWithUnsignedCharBytes:(const void *)bytes {
 88    return @(*(const unsigned char *)bytes);
 89}
 90
 91+ (id)numberWithUnsignedIntBytes:(const void *)bytes {
 92    return @(*(const unsigned int *)bytes);
 93}
 94
 95+ (id)numberWithUnsignedIntegerBytes:(const void *)bytes {
 96    return @(*(const NSUInteger *)bytes);
 97}
 98
 99+ (id)numberWithUnsignedLongBytes:(const void *)bytes {
100    return @(*(const unsigned long *)bytes);
101}
102
103+ (id)numberWithUnsignedLongLongBytes:(const void *)bytes {
104    return @(*(const unsigned long long *)bytes);
105}
106
107+ (id)numberWithUnsignedShortBytes:(const void *)bytes {
108    return @(*(const unsigned short *)bytes);
109}
110
111@end