[squeak-dev] The Trunk: Collections-eem.656.mcz
Eliot Miranda
eliot.miranda at gmail.com
Sat Sep 26 18:30:50 UTC 2015
Hi Levente,
> On Sep 26, 2015, at 11:03 AM, Levente Uzonyi <leves at elte.hu> wrote:
>
> Implementing #at:ifPresent:ifAbsentPut: without reusing #at:ifAbsent: and #at:ifAbsentPut: implies that it must be defined in some of its subclasses too to make it work.
> This is the reason why #at:ifAbsentPut: and #at:ifPresent:ifAbsent: reuse the low-level methods, sacrificing performance.
I understand. But a) using a single scanFor: saves half the search work in the ifAbsentPut: case and b) no extra effort is required if the subclass overrides scanFor: which is the real low level method. So I'm happy with my decision.
> Levente
_,,,^..^,,,_ (phone)
>
>> On Fri, 25 Sep 2015, commits at source.squeak.org wrote:
>>
>> Eliot Miranda uploaded a new version of Collections to project The Trunk:
>> http://source.squeak.org/trunk/Collections-eem.656.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Collections-eem.656
>> Author: eem
>> Time: 25 September 2015, 11:36:48.911 am
>> UUID: 50ec1b3e-c058-4167-889e-836e994b500b
>> Ancestors: Collections-ul.655
>>
>> Add Dictionary>>at:ifPresent:ifAbsentPut:.
>> Move Dictionary>>fasterKeys & keyForIdentity: to 50Deprecated
>>
>> =============== Diff against Collections-ul.655 ===============
>>
>> Item was added:
>> + ----- Method: Dictionary>>at:ifPresent:ifAbsentPut: (in category 'accessing') -----
>> + at: key ifPresent: oneArgBlock ifAbsentPut: absentBlock
>> + "Lookup the given key in the receiver. If it is present, answer the value of
>> + evaluating oneArgBlock with the value associated with the key. Otherwise
>> + add the value of absentBlock under the key, and answer that value."
>> +
>> + | index value |
>> + index := self scanFor: key.
>> + (array at: index) ifNotNil:
>> + [:element|
>> + ^oneArgBlock value: element value].
>> + value := absentBlock value.
>> + self atNewIndex: index put: (Association key: key value: value).
>> + ^value!
>>
>> Item was removed:
>> - ----- Method: Dictionary>>fasterKeys (in category 'accessing') -----
>> - fasterKeys
>> - "Contrary to old version of #keys, this method returned an Array rather than a Set.
>> - This was faster because no lookup: was performed.
>> - But now, #keys also return an Array, so don't use #fasterKeys anymore."
>> -
>> - self deprecated: 'use #keys'.
>> -
>> - ^self keys.
>> - !
>>
>> Item was removed:
>> - ----- Method: Dictionary>>keyForIdentity: (in category 'accessing') -----
>> - keyForIdentity: anObject
>> - "If anObject is one of the values of the receive, return its key, else return nil. Contrast #keyAtValue: in which there is only an equality check, here there is an identity check"
>> -
>> - self deprecated: 'Use #keyAtIdentityValue:ifAbsent:'.
>> - ^self keyAtIdentityValue: anObject ifAbsent: nil!
>
More information about the Squeak-dev
mailing list
|