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
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
|