You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
1.9 KiB

#import "DoubleKeyMap.h"
@implementation DoubleKeyMap
- (id) init
{
self = [super init];
if ( self != nil ) {
data = [[AMutableDictionary dictionaryWithCapacity:30] retain];
}
return self;
}
- (id) setObject:(id)v forKey1:(id)k1 forKey2:(id)k2
{
AMutableDictionary *data2 = [data objectForKey:k1];
id prev = nil;
if ( data2 == nil ) {
data2 = [AMutableDictionary dictionaryWithCapacity:30];
[data setObject:data2 forKey:k1];
}
else {
prev = [data2 objectForKey:k2];
}
[data2 setObject:v forKey:k2];
return prev;
}
- (id) objectForKey1:(id)k1 forKey2:(id)k2
{
AMutableDictionary *data2 = [data objectForKey:k1];
if ( data2 == nil )
return nil;
return [data2 objectForKey:k2];
}
- (AMutableDictionary *) objectForKey:(id)k1
{
return [data objectForKey:k1];
}
/**
* Get all values associated with primary key
*/
- (NSArray *) valuesForKey:(id)k1
{
AMutableDictionary *data2 = [data objectForKey:k1];
if ( data2 == nil )
return nil;
return [data2 allValues];
}
/**
* get all primary keys
*/
- (NSArray *) allKeys1
{
return [data allKeys];
}
/**
* get all secondary keys associated with a primary key
*/
- (NSArray *) allKeys2:(id)k1
{
AMutableDictionary * data2 = [data objectForKey:k1];
if ( data2 == nil )
return nil;
return [data2 allKeys];
}
- (AMutableArray *) values
{
// HashMap *s = [[HashMap newHashMapWithLen:30];
AMutableArray *s = [AMutableArray arrayWithCapacity:30];
for (AMutableDictionary *k2 in [data allValues]) {
for ( NSString *v in [k2 allValues]) {
[s addObject:v];
}
}
return s;
}
- (void) dealloc
{
#ifdef DEBUG_DEALLOC
NSLog( @"called dealloc in CommonToken" );
#endif
[data release];
[super dealloc];
}
@synthesize data;
@end