On Wed, 20 Feb 2008 23:05:47 +0100, nicolas cellier wrote:
Klaus D. Witzel a écrit :
On Wed, 20 Feb 2008 02:01:49 +0100, nicolas cellier wrote:
Some proposed an alternative based on (self removeAll: self), and started writing optimized versions of #removeAll:.
No, (anOrderedCollection removeAll: anOrderedCollection) was not optimized. It had a *very* long known bug, which was fixed. Please do less mixing of subjects in threads.
OK, I'm extrapolating.
O.K. the fix from OrderedCollection *could* be applied to Set (the fix requires #copyEmpty), but see Heap below.
In this case, while you are at it:
| aSet | aSet :='Klaus' asSet. aSet removeAll: aSet. aSet
| aHeap | aHeap := Heap withAll: 'Witzel'. aHeap removeAll: aHeap. aHeap
Don't use Heap much, it is not very conformant; example: (Heap withAll: 'array') reject: [:x | x = $r] => an Array. Perhaps people didn't know about *all* senders of #species ...
I would have used my name, but it seems i am removeable ;-) | aSet | aSet :='Cellier' asSet. aSet removeAll: aSet. aSet
Try with the collection of your choice.
In the mean time, don't use (self removeAll: self)...
One step after the other :) no doubt #removeAll: gets fixed, perhaps in the next release?
Yes i'm mixing threads,should be How to NOT empty a collection ;-)
Nicolas
I think our biggest problem is that we have plenty possible ways to do it... Finding a balance between genericity and efficiency...
No, more correctness at the price of less efficiency :)
Nicolas
Agree on this one. Then allow removeAllSuchThat: as default implementation.
Nicolas