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