xref: /aosp_15_r20/external/antlr/runtime/ObjC/Framework/Entry.m (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robot#import "Entry.h"
2*16467b97STreehugger Robot#import <Foundation/Foundation.h>
3*16467b97STreehugger Robot#import "RuntimeException.h"
4*16467b97STreehugger Robot
5*16467b97STreehugger Robot@implementation HTEntry
6*16467b97STreehugger Robot
7*16467b97STreehugger Robot@synthesize next;
8*16467b97STreehugger Robot@synthesize hash;
9*16467b97STreehugger Robot@synthesize key;
10*16467b97STreehugger Robot@synthesize value;
11*16467b97STreehugger Robot
12*16467b97STreehugger Robot+ (id) newEntry:(int)aHash key:(NSString *)aKey value:(id)aValue next:(HTEntry *)aNext
13*16467b97STreehugger Robot{
14*16467b97STreehugger Robot    return [[HTEntry alloc] init:aHash key:aKey value:aValue next:aNext];
15*16467b97STreehugger Robot}
16*16467b97STreehugger Robot
17*16467b97STreehugger Robot- (id) init:(int)aHash key:(NSString *)aKey value:(id)aValue next:(HTEntry *)aNext
18*16467b97STreehugger Robot{
19*16467b97STreehugger Robot    if ( (self = [super init]) != nil) {
20*16467b97STreehugger Robot        next  = aNext;
21*16467b97STreehugger Robot        hash  = aHash;
22*16467b97STreehugger Robot        key   = aKey;
23*16467b97STreehugger Robot        value = aValue;
24*16467b97STreehugger Robot    }
25*16467b97STreehugger Robot    return self;
26*16467b97STreehugger Robot}
27*16467b97STreehugger Robot
28*16467b97STreehugger Robot- (void) dealloc
29*16467b97STreehugger Robot{
30*16467b97STreehugger Robot    [next release];
31*16467b97STreehugger Robot    [key release];
32*16467b97STreehugger Robot    [value release];
33*16467b97STreehugger Robot    [super dealloc];
34*16467b97STreehugger Robot}
35*16467b97STreehugger Robot
36*16467b97STreehugger Robot
37*16467b97STreehugger Robot- (id) copyWithZone:(NSZone *)zone
38*16467b97STreehugger Robot{
39*16467b97STreehugger Robot    HTEntry *copy = [[HTEntry allocWithZone:zone] init:hash key:key value:value next:next];
40*16467b97STreehugger Robot    copy.next  = next;
41*16467b97STreehugger Robot    copy.hash  = hash;
42*16467b97STreehugger Robot    copy.key   = key;
43*16467b97STreehugger Robot    copy.value = value;
44*16467b97STreehugger Robot    //    return [[[HTEntry allocWithZone:zone] init:hash key:key value:value next:(next == nil ? nil : (HTEntry *)[next copyWithZone])] autorelease];
45*16467b97STreehugger Robot    return copy;
46*16467b97STreehugger Robot}
47*16467b97STreehugger Robot
48*16467b97STreehugger Robot- (void) setValue:(id)aValue
49*16467b97STreehugger Robot{
50*16467b97STreehugger Robot    if (aValue == nil)
51*16467b97STreehugger Robot        @throw [[[NullPointerException alloc] init] autorelease];
52*16467b97STreehugger Robot    //    id oldValue = value;
53*16467b97STreehugger Robot    value = aValue;
54*16467b97STreehugger Robot    //    return oldValue;
55*16467b97STreehugger Robot}
56*16467b97STreehugger Robot
57*16467b97STreehugger Robot- (BOOL) isEqualTo:(id)o
58*16467b97STreehugger Robot{
59*16467b97STreehugger Robot/*
60*16467b97STreehugger Robot    if (!([o conformsToProtocol:@protocol(HTEntry)]))
61*16467b97STreehugger Robot        return NO;
62*16467b97STreehugger Robot */
63*16467b97STreehugger Robot    HTEntry *e = (HTEntry *)o;
64*16467b97STreehugger Robot    return (key == nil ? e.key == nil : [key isEqualTo:e.key]) && (value == nil ? e.value == nil : [value isEqualTo:e.value]);
65*16467b97STreehugger Robot}
66*16467b97STreehugger Robot
67*16467b97STreehugger Robot- (int) hash
68*16467b97STreehugger Robot{
69*16467b97STreehugger Robot    return hash ^ (value == nil ? 0 : [value hash]);
70*16467b97STreehugger Robot}
71*16467b97STreehugger Robot
72*16467b97STreehugger Robot- (NSString *) description
73*16467b97STreehugger Robot{
74*16467b97STreehugger Robot    return [NSString stringWithFormat:@"%@ = %@",[key description], [value description]];
75*16467b97STreehugger Robot}
76*16467b97STreehugger Robot
77*16467b97STreehugger Robot@end
78*16467b97STreehugger Robot
79*16467b97STreehugger Robot@implementation LMNode
80*16467b97STreehugger Robot
81*16467b97STreehugger Robot@synthesize next;
82*16467b97STreehugger Robot@synthesize prev;
83*16467b97STreehugger Robot@synthesize item;
84*16467b97STreehugger Robot
85*16467b97STreehugger Robot+ (LMNode *) newNode:(LMNode *)aPrev element:(id)anElement next:(LMNode *)aNext
86*16467b97STreehugger Robot{
87*16467b97STreehugger Robot    return [[LMNode alloc] init:aPrev element:anElement next:aNext];
88*16467b97STreehugger Robot}
89*16467b97STreehugger Robot
90*16467b97STreehugger Robot- (id) init:(LMNode *)aPrev element:(id)anElement next:(LMNode *)aNext
91*16467b97STreehugger Robot{
92*16467b97STreehugger Robot    self = [super init];
93*16467b97STreehugger Robot    if (self) {
94*16467b97STreehugger Robot        item = anElement;
95*16467b97STreehugger Robot        next = aNext;
96*16467b97STreehugger Robot        prev = aPrev;
97*16467b97STreehugger Robot    }
98*16467b97STreehugger Robot    return self;
99*16467b97STreehugger Robot}
100*16467b97STreehugger Robot
101*16467b97STreehugger Robot- (void) dealloc
102*16467b97STreehugger Robot{
103*16467b97STreehugger Robot    [item release];
104*16467b97STreehugger Robot    [next release];
105*16467b97STreehugger Robot    [prev release];
106*16467b97STreehugger Robot    [super dealloc];
107*16467b97STreehugger Robot}
108*16467b97STreehugger Robot
109*16467b97STreehugger Robot@end
110*16467b97STreehugger Robot
111