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