The Trunk: Collections-ul.236.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Collections-ul.236.mcz

commits-2
Andreas Raab uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-ul.236.mcz

==================== Summary ====================

Name: Collections-ul.236
Author: ul
Time: 1 December 2009, 4:54:17 am
UUID: 7574c4aa-b907-1f4e-ba28-661aa9c084ae
Ancestors: Collections-ul.235

- revert #do: #associationsDo: and the senders of #scanForEmptySlotFor:
- removed preamble
- add grow tweak to WeakSet
- rehash everything at postscript

=============== Diff against Collections-ul.235 ===============

Item was changed:
  ----- Method: KeyedSet>>noCheckNoGrowFillFrom: (in category 'private') -----
  noCheckNoGrowFillFrom: anArray
  "Add the elements of anArray except nils to me assuming that I don't contain any of them, they are unique and I have more free space than they require."
 
  1 to: anArray size do: [ :index |
  | object |
  (object := anArray at: index) ifNotNil: [
  array
+ at: (self scanForEmptySlotFor: (keyBlock value: object))
- at: (self scanFor: (keyBlock value: object))
  put: object ] ]!

Item was changed:
  ----- Method: WeakSet>>noCheckNoGrowFillFrom: (in category 'private') -----
  noCheckNoGrowFillFrom: anArray
  "Add the elements of anArray except nils and flag to me assuming that I don't contain any of them, they are unique and I have more free space than they require."
 
  tally := 0.
  1 to: anArray size do: [ :index |
  | object |
  ((object := anArray at: index) == flag or: [
  object == nil ]) ifFalse: [
  array
+ at: (self scanForEmptySlotFor: object)
- at: (self scanFor: object)
  put: object.
  tally := tally + 1 ] ]!

Item was changed:
  ----- Method: Set>>noCheckNoGrowFillFrom: (in category 'private') -----
  noCheckNoGrowFillFrom: anArray
  "Add the elements of anArray except nils to me assuming that I don't contain any of them, they are unique and I have more free space than they require."
 
  1 to: anArray size do: [ :index |
  | object |
  (object := anArray at: index) ifNotNil: [
  array
+ at: (self scanForEmptySlotFor: object)
- at: (self scanFor: object)
  put: object ] ]!

Item was added:
+ ----- Method: WeakSet>>grow (in category 'private') -----
+ grow
+ "Grow the elements array if needed.
+ Since WeakSets just nil their slots, a lot of the occupied (in the eyes of the set) slots are usually empty. Doubling size if unneeded can lead to BAD performance, therefore we see if reassigning the <live> elements to a Set of similiar size leads to a sufficiently (50% used here) empty set first"
+
+ | oldTally |
+ oldTally := tally.
+ self rehash.
+ oldTally // 2 < tally ifTrue: [ super grow ]!

Item was changed:
  ----- Method: Dictionary>>noCheckNoGrowFillFrom: (in category 'private') -----
  noCheckNoGrowFillFrom: anArray
  "Add the elements of anArray except nils to me assuming that I don't contain any of them, they are unique and I have more free space than they require."
 
  1 to: anArray size do: [ :index |
  | object |
  (object := anArray at: index) ifNotNil: [
  array
+ at: (self scanForEmptySlotFor: object key)
- at: (self scanFor: object key)
  put: object ] ]!

Item was changed:
  ----- Method: WeakKeyDictionary>>noCheckNoGrowFillFrom: (in category 'private') -----
  noCheckNoGrowFillFrom: anArray
  "Add the elements of anArray except nils and flag to me assuming that I don't contain any of them, they are unique and I have more free space than they require."
 
  tally := 0.
  1 to: anArray size do:[ :i |
  | association |
  (association := anArray at: i) ifNotNil: [
  array
+ at: (self scanForEmptySlotFor: association key)
- at: (self scanFor: association key)
  put: association.
  tally := tally + 1 ] ]!

Item was changed:
  ----- Method: WeakSet>>do: (in category 'public') -----
  do: aBlock
 
+ tally = 0 ifTrue: [ ^self ].
+ 1 to: array size do: [ :index |
+ | each |
+ ((each := array at: index) == nil or: [ each == flag ])
- tally = 0 ifTrue: [^self].
- array do: [ :each |
- (each == nil or: [each == flag])
  ifFalse: [ aBlock value: each ] ]!

Item was changed:
  ----- Method: WeakKeyDictionary>>finalizeValues: (in category 'finalization') -----
  finalizeValues: finiObjects
  "Remove all associations with key == nil and value is in finiObjects.
  This method is folded with #rehash for efficiency."
 
  | oldArray |
  oldArray := array.
  array := Array new: oldArray size.
  tally := 0.
  1 to: array size do:[ :i |
  | association |
  (association := oldArray at: i) ifNotNil: [
  | key |
  ((key := association key) == nil and: [ "Don't let the key go away"
  finiObjects includes: association value ])
  ifFalse: [
  array
+ at: (self scanForEmptySlotFor: key)
- at: (self scanFor: key)
  put: association.
  tally := tally + 1 ] ] ]!

Item was changed:

Item was changed:
  ----- Method: WeakKeyToCollectionDictionary>>noCheckNoGrowFillFrom: (in category 'as yet unclassified') -----
  noCheckNoGrowFillFrom: anArray
  "Add the elements of anArray except nils and associations with empty collections (or with only nils) to me assuming that I don't contain any of them, they are unique and I have more free space than they require."
 
  tally := 0.
  1 to: anArray size do:[ :i |
  | association cleanedValue |
  ((association := anArray at: i) == nil or: [
  (cleanedValue := association value copyWithout: nil) isEmpty ])
  ifFalse: [
  association value: cleanedValue.
  array
+ at: (self scanForEmptySlotFor: association key)
- at: (self scanFor: association key)
  put: association.
  tally := tally + 1 ] ]!

Item was changed:

Item was changed:
  ----- Method: Dictionary>>associationsDo: (in category 'enumerating') -----
  associationsDo: aBlock
  "Evaluate aBlock for each of the receiver's elements (key/value
  associations)."
 
  tally = 0 ifTrue: [ ^self].
+ 1 to: array size do: [ :index |
+ | each |
+ (each := array at: index)
+ ifNotNil: [ aBlock value: each ] ]!
- array do: [ :each | each ifNotNil: [ aBlock value: each ] ]!

Item was changed:
  ----- Method: WeakSet>>growTo: (in category 'private') -----
  growTo: anInteger
  "Grow the elements array and reinsert the old elements"
 
  | oldElements |
-
  oldElements := array.
  array := WeakArray new: anInteger.
  array atAllPut: flag.
  self noCheckNoGrowFillFrom: oldElements!

Item was changed:
  ----- Method: Set>>do: (in category 'enumerating') -----
  do: aBlock
 
  tally = 0 ifTrue: [ ^self ].
+ 1 to: array size do: [ :index |
+ | each |
+ (each := array at: index)
+ ifNotNil: [ aBlock value: each ] ]!
- array do: [ :each | each ifNotNil: [ aBlock value: each ] ]!