'From Pharo1.2a of ''11 June 2010'' [Latest update: #12164] on 1 October 2010 at 6:53:55 pm'! !WeakKeyDictionary methodsFor: 'accessing' stamp: 'Igor.Stasenko 10/1/2010 17:23'! slowSize "Careful!! Answer the maximum amount of elements in the receiver, not the exact amount" | count | count := 0. 1 to: array size do: [ :index | (array at: index) ifNotNil: [ :object | object expired ifFalse: [ count := count + 1 ] ] ]. ^count! ! !WeakKeyDictionary methodsFor: 'finalization' stamp: 'Igor.Stasenko 10/1/2010 18:53'! expiredValuesDo: aBlock "Clear all associations with nil keys" 1 to: array size do:[:i | | assoc | assoc := array at: i. (assoc notNil and: [ assoc key isNil and: [assoc expired not ]]) ifTrue: [ aBlock value: assoc value. assoc expire. expired := expired + 1. tally := tally - 1. ]]! ! !WeakKeyDictionary methodsFor: 'finalization' stamp: 'Igor.Stasenko 10/1/2010 18:51'! finalizeValues "Clear all associations with nil keys. Avoid using block closures, so it won't produce many garbage (since pushing closure as argument requires creating its preinitialized copy)" 1 to: array size do:[:i | | assoc | assoc := array at: i. assoc ifNotNil:[ assoc expire ifTrue:[ expired := expired + 1. tally := tally - 1. ]. ]. ]. ! !