xref: /aosp_15_r20/external/antlr/runtime/ObjC/Framework/DoubleKeyMap.m (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robot#import "DoubleKeyMap.h"
2*16467b97STreehugger Robot
3*16467b97STreehugger Robot@implementation DoubleKeyMap
4*16467b97STreehugger Robot
5*16467b97STreehugger Robot- (id) init
6*16467b97STreehugger Robot{
7*16467b97STreehugger Robot    self = [super init];
8*16467b97STreehugger Robot    if ( self  != nil ) {
9*16467b97STreehugger Robot        data = [[AMutableDictionary dictionaryWithCapacity:30] retain];
10*16467b97STreehugger Robot    }
11*16467b97STreehugger Robot    return self;
12*16467b97STreehugger Robot}
13*16467b97STreehugger Robot
14*16467b97STreehugger Robot- (id) setObject:(id)v forKey1:(id)k1 forKey2:(id)k2
15*16467b97STreehugger Robot{
16*16467b97STreehugger Robot    AMutableDictionary *data2 = [data objectForKey:k1];
17*16467b97STreehugger Robot    id prev = nil;
18*16467b97STreehugger Robot    if ( data2 == nil ) {
19*16467b97STreehugger Robot        data2 = [AMutableDictionary dictionaryWithCapacity:30];
20*16467b97STreehugger Robot        [data setObject:data2 forKey:k1];
21*16467b97STreehugger Robot    }
22*16467b97STreehugger Robot    else {
23*16467b97STreehugger Robot        prev = [data2 objectForKey:k2];
24*16467b97STreehugger Robot    }
25*16467b97STreehugger Robot    [data2 setObject:v forKey:k2];
26*16467b97STreehugger Robot    return prev;
27*16467b97STreehugger Robot}
28*16467b97STreehugger Robot
29*16467b97STreehugger Robot- (id) objectForKey1:(id)k1 forKey2:(id)k2
30*16467b97STreehugger Robot{
31*16467b97STreehugger Robot    AMutableDictionary *data2 = [data objectForKey:k1];
32*16467b97STreehugger Robot    if ( data2 == nil )
33*16467b97STreehugger Robot        return nil;
34*16467b97STreehugger Robot    return [data2 objectForKey:k2];
35*16467b97STreehugger Robot}
36*16467b97STreehugger Robot
37*16467b97STreehugger Robot- (AMutableDictionary *) objectForKey:(id)k1
38*16467b97STreehugger Robot{
39*16467b97STreehugger Robot    return [data objectForKey:k1];
40*16467b97STreehugger Robot}
41*16467b97STreehugger Robot
42*16467b97STreehugger Robot
43*16467b97STreehugger Robot/**
44*16467b97STreehugger Robot * Get all values associated with primary key
45*16467b97STreehugger Robot */
46*16467b97STreehugger Robot- (NSArray *) valuesForKey:(id)k1
47*16467b97STreehugger Robot{
48*16467b97STreehugger Robot    AMutableDictionary *data2 = [data objectForKey:k1];
49*16467b97STreehugger Robot    if ( data2 == nil )
50*16467b97STreehugger Robot        return nil;
51*16467b97STreehugger Robot    return [data2 allValues];
52*16467b97STreehugger Robot}
53*16467b97STreehugger Robot
54*16467b97STreehugger Robot
55*16467b97STreehugger Robot/**
56*16467b97STreehugger Robot * get all primary keys
57*16467b97STreehugger Robot */
58*16467b97STreehugger Robot- (NSArray *) allKeys1
59*16467b97STreehugger Robot{
60*16467b97STreehugger Robot    return [data allKeys];
61*16467b97STreehugger Robot}
62*16467b97STreehugger Robot
63*16467b97STreehugger Robot
64*16467b97STreehugger Robot/**
65*16467b97STreehugger Robot * get all secondary keys associated with a primary key
66*16467b97STreehugger Robot */
67*16467b97STreehugger Robot- (NSArray *) allKeys2:(id)k1
68*16467b97STreehugger Robot{
69*16467b97STreehugger Robot    AMutableDictionary * data2 = [data objectForKey:k1];
70*16467b97STreehugger Robot    if ( data2 == nil )
71*16467b97STreehugger Robot        return nil;
72*16467b97STreehugger Robot    return [data2 allKeys];
73*16467b97STreehugger Robot}
74*16467b97STreehugger Robot
75*16467b97STreehugger Robot- (AMutableArray *) values
76*16467b97STreehugger Robot{
77*16467b97STreehugger Robot//    HashMap *s = [[HashMap newHashMapWithLen:30];
78*16467b97STreehugger Robot    AMutableArray *s = [AMutableArray arrayWithCapacity:30];
79*16467b97STreehugger Robot
80*16467b97STreehugger Robot    for (AMutableDictionary *k2 in [data allValues]) {
81*16467b97STreehugger Robot
82*16467b97STreehugger Robot        for ( NSString *v in [k2 allValues]) {
83*16467b97STreehugger Robot            [s addObject:v];
84*16467b97STreehugger Robot        }
85*16467b97STreehugger Robot
86*16467b97STreehugger Robot    }
87*16467b97STreehugger Robot
88*16467b97STreehugger Robot    return s;
89*16467b97STreehugger Robot}
90*16467b97STreehugger Robot
91*16467b97STreehugger Robot- (void) dealloc
92*16467b97STreehugger Robot{
93*16467b97STreehugger Robot#ifdef DEBUG_DEALLOC
94*16467b97STreehugger Robot    NSLog( @"called dealloc in CommonToken" );
95*16467b97STreehugger Robot#endif
96*16467b97STreehugger Robot    [data release];
97*16467b97STreehugger Robot    [super dealloc];
98*16467b97STreehugger Robot}
99*16467b97STreehugger Robot
100*16467b97STreehugger Robot@synthesize data;
101*16467b97STreehugger Robot@end
102