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