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