Avoid cache_flush when releasing contents.

(send_release): Remove function.
([Collection -_releaseContents]): New method.
([Collection -dealloc]): Use it.
([Collection -empty]): Likewise.
([Collection -_safeWithElementsCallNoRetain:]): Use
-getNextElement:withEnumState instead of -withElementsCall: to avoid
cache_flush.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@613 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Andrew McCallum 1995-09-27 22:45:44 +00:00
parent 2e9ca621e3
commit 3f05c8ed68

View file

@ -70,26 +70,41 @@
int c = [self count];
elt *elts = (elt*) (*objc_malloc) (c * sizeof(elt));
int i = 0;
void fill_elts(elt e)
void *es = [self newEnumState];
elt e;
while ([self getNextElement:&e withEnumState:&es])
{
elts[i++] = e;
}
[self withElementsCall:fill_elts];
[self freeEnumState:&es];
assert (c == i);
for (i = 0; i < c; i++)
aFunc(elts[i]);
(*objc_free) (elts);
}
static void
send_release(elt e)
- (void) _releaseContents
{
[e.id_u release];
int c = [self count];
elt *elts = (elt*) (*objc_malloc) (c * sizeof(elt));
int i = 0;
void *es = [self newEnumState];
elt e;
while ([self getNextElement:&e withEnumState:&es])
{
elts[i++] = e;
}
[self freeEnumState:&es];
assert (c == i);
for (i = 0; i < c; i++)
[elts[i].id_u release];
(*objc_free) (elts);
}
- (void) dealloc
{
if (CONTAINS_OBJECTS)
[self _safeWithElementsCallNoRetain:send_release];
[self _releaseContents];
[self _collectionDealloc];
[super dealloc];
}
@ -100,7 +115,7 @@ send_release(elt e)
if ([self isEmpty])
return self;
if (CONTAINS_OBJECTS)
[self _safeWithElementsCallNoRetain:send_release];
[self _releaseContents];
[self _empty];
return self;
}