[squeak-dev] The Trunk: Collections-eem.757.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Jun 23 18:33:07 UTC 2017
Eliot Miranda uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-eem.757.mcz
==================== Summary ====================
Name: Collections-eem.757
Author: eem
Time: 23 June 2017, 11:32:54.271499 am
UUID: bdb8992f-4170-46e3-a573-f2bb4cd7a2af
Ancestors: Collections-eem.756
Add Set>>ifAbsentAdd: as a better named equivalent of addNewElement:.
Reimplement withoutDuplicates using ifAbsentAdd:.
Add the obvious Set-specific implementation of addIfNotPresent:.
Fix a bug with RunArray>>=; the old code would error if compared against other than a collection.
=============== Diff against Collections-eem.756 ===============
Item was changed:
+ ----- Method: RunArray>>= (in category 'comparing') -----
+ = anObject
+ "Test if all my elements are equal to those of anObject"
- ----- Method: RunArray>>= (in category 'accessing') -----
- = otherArray
- "Test if all my elements are equal to those of otherArray"
+ ^anObject class == self class
+ ifTrue: "Faster test between two RunArrays"
+ [(runs hasEqualElements: anObject runs)
+ and: [values hasEqualElements: anObject values]]
+ ifFalse:
+ [anObject isCollection and: [self hasEqualElements: anObject]]!
- (otherArray isMemberOf: RunArray) ifFalse: [^ self hasEqualElements: otherArray].
-
- "Faster test between two RunArrays"
- ^ (runs hasEqualElements: otherArray runs)
- and: [values hasEqualElements: otherArray values]!
Item was changed:
----- Method: SequenceableCollection>>withoutDuplicates (in category 'copying') -----
withoutDuplicates
"Answer a copy of the receiver that preserves order but eliminates any duplicates."
| seen |
seen := Set new: self size.
+ ^self select: [:each| seen ifAbsentAdd: each]!
- ^self select: [:each|
- (seen includes: each)
- ifTrue: [false]
- ifFalse: [seen add: each. true]]!
Item was added:
+ ----- Method: Set>>addIfNotPresent: (in category 'adding') -----
+ addIfNotPresent: anObject
+ "Include anObject as one of the receiver's elements, but only if there
+ is no such element already. Anwser anObject."
+
+ ^self add: anObject!
Item was added:
+ ----- Method: Set>>ifAbsentAdd: (in category 'adding') -----
+ ifAbsentAdd: anObject
+ "Ensure anObject is part of the receiver. Answer whether its membership was newly acquired."
+ | index |
+ index := self scanFor: anObject.
+ (array at: index) ifNil:
+ [self
+ atNewIndex: index
+ put: anObject asSetElement.
+ ^true].
+ ^false!
More information about the Squeak-dev
mailing list
|