(_safeWithElementsCallNoRetain:): New method.

(dealloc, empty): Use it.
(send_release): New function.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@279 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Andrew McCallum 1995-04-05 16:02:08 +00:00
parent 81649caa5c
commit f43c5d34f7

View file

@ -65,11 +65,30 @@
return self;
}
- (void) _safeWithElementsCallNoRetain: (void(*)(elt))aFunc
{
int c = [self count];
elt *elts = (elt*) alloca(c * sizeof(elt));
int i = 0;
void fill_elts(elt e)
{
elts[i++] = e;
}
[self withElementsCall:fill_elts];
for (i = 0; i < c; i++)
aFunc(elts[i]);
}
static void
send_release(elt e)
{
[e.id_u release];
}
- (void) dealloc
{
if (CONTAINS_OBJECTS)
[self makeObjectsPerform:@selector(release)];
/* xxx This used to be "safeMakeObjectsPerform:" */
[self _safeWithElementsCallNoRetain:send_release];
[self _collectionDealloc];
[super dealloc];
}
@ -78,8 +97,7 @@
- empty
{
if (CONTAINS_OBJECTS)
[self makeObjectsPerform:@selector(release)];
/* xxx This used to be "safeMakeObjectsPerform:" */
[self _safeWithElementsCallNoRetain:send_release];
[self _empty];
return self;
}