Improve size in a number of pathological cases.
[enjoyable.git] / Config.m
index de3c1cc..55162b0 100644 (file)
--- a/Config.m
+++ b/Config.m
@@ -5,22 +5,38 @@
 //  Created by Sam McCall on 4/05/09.
 //
 
+#import "Config.h"
+
+#import "JSAction.h"
+
 @implementation Config
 
--(id) init {
-       if(self=[super init]) {
-               entries = [[NSMutableDictionary alloc] init];
-       }
-       return self;
+- (id)initWithName:(NSString *)name {
+    if ((self = [super init])) {
+        self.name = name ? name : @"Untitled";
+        _entries = [[NSMutableDictionary alloc] init];
+    }
+    return self;
 }
 
-@synthesize protect, name, entries;
+- (Target *)objectForKeyedSubscript:(JSAction *)action {
+    return action ? _entries[action.uid] : nil;
+}
 
--(void) setTarget:(Target*)target forAction:(id)jsa {
-       [entries setValue:target forKey: [jsa stringify]];
+- (void)setObject:(Target *)target forKeyedSubscript:(JSAction *)action {
+    if (action) {
+        if (target)
+            _entries[action.uid] = target;
+        else
+            [_entries removeObjectForKey:action.uid];
+    }
 }
--(Target*) getTargetForAction: (id) jsa {
-       return [entries objectForKey: [jsa stringify]];
+
+- (NSDictionary *)serialize {
+    NSMutableDictionary* cfgEntries = [[NSMutableDictionary alloc] initWithCapacity:_entries.count];
+    for (id key in _entries)
+        cfgEntries[key] = [_entries[key] serialize];
+    return @{ @"name": _name, @"entries": cfgEntries };
 }
 
 @end