You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
2.6 KiB
171 lines
2.6 KiB
//
|
|
// ACNumber.m
|
|
// ST4
|
|
//
|
|
// Created by Alan Condit on 3/19/12.
|
|
// Copyright 2012 Alan Condit. All rights reserved.
|
|
//
|
|
|
|
#import "ACNumber.h"
|
|
|
|
|
|
@implementation ACNumber
|
|
|
|
+ (ACNumber *)numberWithBool:(BOOL)aBool
|
|
{
|
|
return [[ACNumber alloc] initWithBool:aBool];
|
|
}
|
|
|
|
+ (ACNumber *)numberWithChar:(char)aChar
|
|
{
|
|
return [[ACNumber alloc] initWithChar:aChar];
|
|
}
|
|
|
|
+ (ACNumber *)numberWithDouble:(double)aDouble
|
|
{
|
|
return [[ACNumber alloc] initWithDouble:aDouble];
|
|
}
|
|
|
|
+ (ACNumber *)numberWithInt:(NSInteger)anInt
|
|
{
|
|
return [[ACNumber alloc] initWithInteger:anInt];
|
|
}
|
|
|
|
+ (ACNumber *)numberWithInteger:(NSInteger)anInt
|
|
{
|
|
return [[ACNumber alloc] initWithInteger:anInt];
|
|
}
|
|
|
|
|
|
- (id)init
|
|
{
|
|
self = [super init];
|
|
if (self) {
|
|
// Initialization code here.
|
|
}
|
|
|
|
return self;
|
|
}
|
|
|
|
- (ACNumber *)initWithBool:(BOOL)aBool
|
|
{
|
|
self = [super init];
|
|
if ( self != nil ) {
|
|
fBOOL = YES;
|
|
fChar = NO;
|
|
fDouble = NO;
|
|
fNSInt = NO;
|
|
u.b = aBool;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (ACNumber *)initWithChar:(char)aChar
|
|
{
|
|
self = [super init];
|
|
if ( self != nil ) {
|
|
fBOOL = NO;
|
|
fChar = YES;
|
|
fDouble = NO;
|
|
fNSInt = NO;
|
|
u.c = aChar;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (ACNumber *)initWithDouble:(double)aDouble
|
|
{
|
|
self = [super init];
|
|
if ( self != nil ) {
|
|
fBOOL = NO;
|
|
fChar = NO;
|
|
fDouble = YES;
|
|
fNSInt = NO;
|
|
u.d = aDouble;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (ACNumber *)initWithInteger:(NSInteger)anInt
|
|
{
|
|
self = [super init];
|
|
if ( self != nil ) {
|
|
fBOOL = NO;
|
|
fChar = NO;
|
|
fDouble = NO;
|
|
fNSInt = YES;
|
|
u.i = anInt;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
[super dealloc];
|
|
}
|
|
|
|
- (BOOL)boolValue
|
|
{
|
|
if (fBOOL)
|
|
return u.b;
|
|
else
|
|
return NO;
|
|
}
|
|
|
|
- (char)charValue
|
|
{
|
|
if (fChar)
|
|
return u.c;
|
|
else
|
|
return (char)-1;
|
|
}
|
|
|
|
- (double)doubleValue
|
|
{
|
|
if (fDouble)
|
|
return u.d;
|
|
else
|
|
return 0.0;
|
|
}
|
|
|
|
- (NSInteger)intValue
|
|
{
|
|
if (fNSInt)
|
|
return u.i;
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
- (NSInteger)integerValue
|
|
{
|
|
if (fNSInt)
|
|
return u.i;
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
- (NSInteger)inc
|
|
{
|
|
return (u.i+=1);
|
|
}
|
|
|
|
- (NSInteger)add:(NSInteger)anInt
|
|
{
|
|
return (u.i+=anInt);
|
|
}
|
|
|
|
- (NSString *)description
|
|
{
|
|
if (fBOOL)
|
|
return (u.b == YES) ? @"true" : @"false";
|
|
else if (fChar)
|
|
return [NSString stringWithFormat:@"%c", u.c];
|
|
else if (fNSInt)
|
|
return [NSString stringWithFormat:@"%Ld", u.i];
|
|
else if (fDouble)
|
|
return [NSString stringWithFormat:@"%Lf", u.d];
|
|
return @"ACNumber not valid";
|
|
}
|
|
|
|
@end
|