@@ -85,12 +85,13 @@ [self freeMemory: data]; data = newData; size = newSize; } -- (void)setObject: (id)object - forKey: (id )key +- (void)_setObject: (id)object + forKey: (id)key + copyKey: (BOOL)copyKey { uint32_t i, hash, last; id old; if (key == nil || object == nil) @@ -146,11 +147,11 @@ @throw [OFOutOfRangeException newWithClass: isa]; bucket = [self allocMemoryWithSize: sizeof(*bucket)]; @try { - key = [key copy]; + key = (copyKey ? [key copy] : [key retain]); } @catch (id e) { [self freeMemory: bucket]; @throw e; } @@ -173,10 +174,18 @@ old = data[i]->object; data[i]->object = [object retain]; [old release]; } + +- (void)setObject: (id)object + forKey: (id )key +{ + [self _setObject: object + forKey: key + copyKey: YES]; +} - (void)removeObjectForKey: (id )key { uint32_t i, hash, last;