quakeforge/ruamoko/lib/AutoreleasePool.r

68 lines
1012 B
R

#include "AutoreleasePool.h"
#include "Stack.h"
@static AutoreleasePool sharedInstance;
@static Stack poolStack;
@interface AutoreleasePool (Private)
- (void) addItem: (id)anItem;
@end
@implementation AutoreleasePool
- (id) init
{
if (!(self = [super init]))
return NIL;
if (!poolStack)
poolStack = [Stack new];
if (!sharedInstance)
sharedInstance = self;
}
+ (void) addObject: (id)anObject
{
}
- (void) addObject: (id)anObject
{
}
- (id) retain
{
[self error: "Don't send -retain to an autorelease pool."];
}
- (/*oneway*/ void) release
{
if (self == sharedInstance)
sharedInstance = NIL;
[self dealloc];
}
- (void) dealloc
{
local unsigned i;
local id tmp;
for (i = 0; i < count; i++)
[array[(integer)i] release]; //FIXME no unsigned addressing
obj_free (array);
/*
This may be wrong.
Releasing an autorelease pool should keep popping pools off the stack
until it gets to itself.
*/
do {
tmp = [poolStack pop];
} while (tmp != self);
[super dealloc];
}
@end