diff options
Diffstat (limited to 'antlr-3.4/runtime/ObjC/Framework/ANTLRDoubleKeyMap.m')
-rw-r--r-- | antlr-3.4/runtime/ObjC/Framework/ANTLRDoubleKeyMap.m | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/antlr-3.4/runtime/ObjC/Framework/ANTLRDoubleKeyMap.m b/antlr-3.4/runtime/ObjC/Framework/ANTLRDoubleKeyMap.m new file mode 100644 index 0000000..3642ef0 --- /dev/null +++ b/antlr-3.4/runtime/ObjC/Framework/ANTLRDoubleKeyMap.m @@ -0,0 +1,101 @@ +#import "ANTLRDoubleKeyMap.h" + +@implementation ANTLRDoubleKeyMap + +- (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 +{ +// ANTLRHashMap *s = [[ANTLRHashMap newANTLRHashMapWithLen: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 ANTLRCommonToken" ); +#endif + [data release]; + [super dealloc]; +} + +@synthesize data; +@end |