#TUNING by stefan
class: OrderedCollection
changed: #removeAllSuchThat:
moved tag to fix grow of OrderedCollection of size 1
--- a/OrderedCollection.st Tue May 17 11:53:06 2016 +0200
+++ b/OrderedCollection.st Tue May 17 15:47:49 2016 +0200
@@ -324,6 +324,7 @@
! !
+
!OrderedCollection methodsFor:'accessing'!
at:anInteger
@@ -751,18 +752,21 @@
|removed element
srcIndex "{ Class: SmallInteger }"
- dstIndex "{ Class: SmallInteger }"|
+ dstIndex "{ Class: SmallInteger }"
+ lastIdx "{ Class: SmallInteger }"|
"/ first search forward to the first element which has
"/ to be removed (meets the criteria)
srcIndex := firstIndex.
+ lastIdx := lastIndex.
+
[
- srcIndex > lastIndex
+ srcIndex > lastIdx
or:[ aBlock value:(contentsArray at:srcIndex) ]
] whileFalse:[
srcIndex := srcIndex + 1.
].
- srcIndex > lastIndex ifTrue:[
+ srcIndex > lastIdx ifTrue:[
"/ nothing removed
^ #()
].
@@ -774,9 +778,8 @@
dstIndex := srcIndex.
srcIndex := srcIndex + 1.
- [ srcIndex <= lastIndex ] whileTrue:[
- element := contentsArray at:srcIndex.
- srcIndex := srcIndex + 1.
+ srcIndex to:lastIdx do:[:idx|
+ element := contentsArray at:idx.
(aBlock value:element) ifTrue:[
removed add:element
] ifFalse:[
@@ -784,7 +787,7 @@
dstIndex := dstIndex + 1.
].
].
- contentsArray from:dstIndex to:lastIndex put:nil.
+ contentsArray from:dstIndex to:lastIdx put:nil.
lastIndex := dstIndex - 1.
^ removed