From 5344b93b3f8eb492a6e0aac70dea4d114e11eaad Mon Sep 17 00:00:00 2001 From: mccallum Date: Fri, 30 Jun 1995 13:45:13 +0000 Subject: [PATCH] Allow easy user-modification of concrete class. ([NSArray +_setConcreteClass:]): New method. ([NSArray +_concreteClass]): New method. ([NSArray +initialize]): New method. (NSArray_concrete_class): New static variable. ([NSArray +arrayWithObject:]): Don't use addObject:. ([NSMutableArray +_setConcreteClass:]): New method. ([NSMutableArray +_concreteClass]): New method. ([NSMutableArray +initialize]): New method. (NSMutableArray_concrete_class): New static variable. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@472 72102866-910b-0410-8b05-ffd578937521 --- Source/NSArray.m | 52 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/Source/NSArray.m b/Source/NSArray.m index c9b33b9ea..323bbcb43 100644 --- a/Source/NSArray.m +++ b/Source/NSArray.m @@ -30,21 +30,38 @@ @implementation NSArray +static Class NSArray_concrete_class; + ++ (void) _setConcreteClass: (Class)c +{ + NSArray_concrete_class = c; +} + ++ (Class) _concreteClass +{ + return NSArray_concrete_class; +} + ++ (void) initialize +{ + NSArray_concrete_class = [NSGArray class]; +} + + allocWithZone: (NSZone*)z { - return NSAllocateObject([NSGArray class], 0, z); + return NSAllocateObject([self _concreteClass], 0, z); } + array { - return [[[NSGArray alloc] init] autorelease]; + return [[[[self _concreteClass] alloc] init] + autorelease]; } + arrayWithObject: anObject { - id a = [[[NSGArray class] alloc] init]; - [a addObject: anObject]; - return [a autorelease]; + return [[[[self _concreteClass] alloc] initWithObjects:&anObject count:1] + autorelease]; } /* This is the designated initializer for NSArray. */ @@ -93,7 +110,7 @@ { va_list ap; va_start(ap, firstObject); - self = [[NSGArray alloc] initWithObjects:firstObject rest:ap]; + self = [[[self _concreteClass alloc] initWithObjects:firstObject rest:ap]; va_end(ap); return [self autorelease]; } @@ -275,14 +292,31 @@ @implementation NSMutableArray: NSArray +static Class NSMutableArray_concrete_class; + ++ (void) _setConcreteClass: (Class)c +{ + NSMutableArray_concrete_class = c; +} + ++ (Class) _concreteClass +{ + return NSMutableArray_concrete_class; +} + ++ (void) initialize +{ + NSMutableArray_concrete_class = [NSGMutableArray class]; +} + + allocWithZone: (NSZone*)z { - return NSAllocateObject([NSGMutableArray class], 0, z); + return NSAllocateObject([self _concreteClass], 0, z); } + arrayWithCapacity: (unsigned)numItems { - return [[[[NSGMutableArray class] alloc] initWithCapacity:numItems] + return [[[[self _concreteClass] alloc] initWithCapacity:numItems] autorelease]; } @@ -293,10 +327,12 @@ return nil; } +#if 0 /* Not in OpenStep. */ - (void) addObjects: (id*)objects count: (unsigned)count { } +#endif /* Override our superclass's designated initializer to go our's */ - initWithObjects: (id*)objects count: (unsigned)count