From d03e3c0a1d5b666e84053c377276d4d6925f6e7a Mon Sep 17 00:00:00 2001 From: mccallum Date: Wed, 5 Apr 1995 16:02:08 +0000 Subject: [PATCH] (_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 --- Source/Collection.m | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/Source/Collection.m b/Source/Collection.m index fb45fefc3..d8608b509 100644 --- a/Source/Collection.m +++ b/Source/Collection.m @@ -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; }