blob: 989f81acf16511ea7ae8d41ef674d90cbf1056c7 [file] [log] [blame]
//
// 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