1 // 2 // ACNumber.m 3 // ST4 4 // 5 // Created by Alan Condit on 3/19/12. 6 // Copyright 2012 Alan Condit. All rights reserved. 7 // 8 9 #import "ACNumber.h" 10 11 12 @implementation ACNumber 13 14 + (ACNumber *)numberWithBool:(BOOL)aBool 15 { 16 return [[ACNumber alloc] initWithBool:aBool]; 17 } 18 19 + (ACNumber *)numberWithChar:(char)aChar 20 { 21 return [[ACNumber alloc] initWithChar:aChar]; 22 } 23 24 + (ACNumber *)numberWithDouble:(double)aDouble 25 { 26 return [[ACNumber alloc] initWithDouble:aDouble]; 27 } 28 29 + (ACNumber *)numberWithInt:(NSInteger)anInt 30 { 31 return [[ACNumber alloc] initWithInteger:anInt]; 32 } 33 34 + (ACNumber *)numberWithInteger:(NSInteger)anInt 35 { 36 return [[ACNumber alloc] initWithInteger:anInt]; 37 } 38 39 40 - (id)init 41 { 42 self = [super init]; 43 if (self) { 44 // Initialization code here. 45 } 46 47 return self; 48 } 49 50 - (ACNumber *)initWithBool:(BOOL)aBool 51 { 52 self = [super init]; 53 if ( self != nil ) { 54 fBOOL = YES; 55 fChar = NO; 56 fDouble = NO; 57 fNSInt = NO; 58 u.b = aBool; 59 } 60 return self; 61 } 62 63 - (ACNumber *)initWithChar:(char)aChar 64 { 65 self = [super init]; 66 if ( self != nil ) { 67 fBOOL = NO; 68 fChar = YES; 69 fDouble = NO; 70 fNSInt = NO; 71 u.c = aChar; 72 } 73 return self; 74 } 75 76 - (ACNumber *)initWithDouble:(double)aDouble 77 { 78 self = [super init]; 79 if ( self != nil ) { 80 fBOOL = NO; 81 fChar = NO; 82 fDouble = YES; 83 fNSInt = NO; 84 u.d = aDouble; 85 } 86 return self; 87 } 88 89 - (ACNumber *)initWithInteger:(NSInteger)anInt 90 { 91 self = [super init]; 92 if ( self != nil ) { 93 fBOOL = NO; 94 fChar = NO; 95 fDouble = NO; 96 fNSInt = YES; 97 u.i = anInt; 98 } 99 return self; 100 } 101 102 - (void)dealloc 103 { 104 [super dealloc]; 105 } 106 107 - (BOOL)boolValue 108 { 109 if (fBOOL) 110 return u.b; 111 else 112 return NO; 113 } 114 115 - (char)charValue 116 { 117 if (fChar) 118 return u.c; 119 else 120 return (char)-1; 121 } 122 123 - (double)doubleValue 124 { 125 if (fDouble) 126 return u.d; 127 else 128 return 0.0; 129 } 130 131 - (NSInteger)intValue 132 { 133 if (fNSInt) 134 return u.i; 135 else 136 return -1; 137 } 138 139 - (NSInteger)integerValue 140 { 141 if (fNSInt) 142 return u.i; 143 else 144 return -1; 145 } 146 147 - (NSInteger)inc 148 { 149 return (u.i+=1); 150 } 151 152 - (NSInteger)add:(NSInteger)anInt 153 { 154 return (u.i+=anInt); 155 } 156 157 - (NSString *)description 158 { 159 if (fBOOL) 160 return (u.b == YES) ? @"true" : @"false"; 161 else if (fChar) 162 return [NSString stringWithFormat:@"%c", u.c]; 163 else if (fNSInt) 164 return [NSString stringWithFormat:@"%Ld", u.i]; 165 else if (fDouble) 166 return [NSString stringWithFormat:@"%Lf", u.d]; 167 return @"ACNumber not valid"; 168 } 169 170 @end 171