This is NSDictionary+WriteCopy.m in view mode; [Download] [Up]
// Donated by Henry Krempel <krempel@chezhank.com>
#import "NSDictionary+WriteCopy.h"
#import <Foundation/Foundation.h>
@implementation NSDictionary(WriteCopy)
- deepMutableCopyWithZone:(NSZone *)z;
{
int count = [self count];
NSMutableDictionary *out = [[NSMutableDictionary allocWithZone:z] initWithCapacity:count];
if( count > 0 )
{
id keyEnumerator, objectEnumerator;
id key, value;
keyEnumerator = [self keyEnumerator];
objectEnumerator = [self objectEnumerator];
while ((key = [keyEnumerator nextObject]) &&
(value = [objectEnumerator nextObject]))
{
id newValue = nil;
if ([value isKindOfClass:[NSDictionary class]])
newValue = [value deepMutableCopyWithZone:z];
else if ([value respondsToSelector:@selector(deepMutableCopyWithZone:)])
newValue = [value deepMutableCopyWithZone:z];
else if ([value respondsToSelector:@selector(mutableCopyWithZone:)])
newValue = [value mutableCopyWithZone:z];
else
newValue = value;
[out setObject:newValue forKey:key];
[newValue release];
}
}
return out;
}
- deepMutableCopy;
{
return [self deepMutableCopyWithZone:[self zone]];
}
@end
@implementation NSArray(WriteCopy)
- deepMutableCopyWithZone:(NSZone *)z;
{
int count = [self count];
NSMutableArray *out = [[NSMutableArray allocWithZone:z] initWithCapacity:count];
if( count > 0 )
{
NSEnumerator *objectEnumerator;
id value;
objectEnumerator = [self objectEnumerator];
while ((value = [objectEnumerator nextObject]))
{
id newValue = nil;
if ([value isKindOfClass:[NSArray class]])
newValue = [value deepMutableCopyWithZone:z];
else if ([value respondsToSelector:@selector(deepMutableCopyWithZone:)])
newValue = [value deepMutableCopyWithZone:z];
else if ([value respondsToSelector:@selector(mutableCopyWithZone:)])
newValue = [value mutableCopyWithZone:z];
else
newValue = value;
[out addObject:newValue];
[newValue release];
}
}
return out;
}
- deepMutableCopy;
{
return [self deepMutableCopyWithZone:[self zone]];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.