diff --git a/Source/Heap.m b/Source/Heap.m index fbe7da027..1508d2869 100644 --- a/Source/Heap.m +++ b/Source/Heap.m @@ -76,7 +76,7 @@ _contents_array[0] = _contents_array[_count-1]; decrementCount(self); [self heapifyFromIndex:0]; - return ret; + return AUTORELEASE_ELT(ret); } - addElement: (elt)newElement @@ -84,6 +84,7 @@ int i; incrementCount(self); + RETAIN_ELT(newElement); for (i = _count-1; i > 0 && COMPARE_ELEMENTS(_contents_array[HEAP_PARENT(i)], newElement) < 0; diff --git a/Source/LinkedList.m b/Source/LinkedList.m index c33781085..e2fb4be76 100644 --- a/Source/LinkedList.m +++ b/Source/LinkedList.m @@ -119,7 +119,7 @@ [[oldElement.id_u nextLink] setPrevLink:[oldElement.id_u prevLink]]; [[oldElement.id_u prevLink] setNextLink:[oldElement.id_u nextLink]]; _count--; - return oldElement; + return AUTORELEASE_ELT(oldElement); } - insertElement: (elt)newElement after: (elt)oldElement @@ -160,18 +160,20 @@ [oldElement.id_u setPrevLink:newElement.id_u]; } _count++; + RETAIN_ELT(newElement); return self; } - (elt) replaceElement: (elt)oldElement with: (elt)newElement { + RETAIN_ELT(newElement); if (oldElement.id_u == _first_link) _first_link = newElement.id_u; [newElement.id_u setNextLink:[oldElement.id_u nextLink]]; [newElement.id_u setPrevLink:[oldElement.id_u prevLink]]; [[oldElement.id_u prevLink] setNextLink:newElement.id_u]; [[oldElement.id_u nextLink] setPrevLink:newElement.id_u]; - return oldElement; + return AUTORELEASE_ELT(oldElement); } /* End of methods that change the instance variables. */ diff --git a/Source/RBTree.m b/Source/RBTree.m index 17fdc64a7..718550eb5 100644 --- a/Source/RBTree.m +++ b/Source/RBTree.m @@ -237,7 +237,7 @@ static id nilRBNode; [oldElement.id_u setLeftNode:[self nilNode]]; [oldElement.id_u setParentNode:[self nilNode]]; _count--; - return oldElement; + return AUTORELEASE_ELT(oldElement); } /* Override methods that could violate assumptions of RBTree structure.