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