[squeak-dev] The Trunk: Collections-nice.158.mcz

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Mon Oct 5 08:39:40 UTC 2009


This fail loading because Collections-nice.157 is a pre-requisite
I will try to upload an update.mcm

2009/10/5  <commits at source.squeak.org>:
> Nicolas Cellier uploaded a new version of Collections to project The Trunk:
> http://source.squeak.org/trunk/Collections-nice.158.mcz
>
> ==================== Summary ====================
>
> Name: Collections-nice.158
> Author: nice
> Time: 5 October 2009, 10:23:31 am
> UUID: 27baf0fe-4d19-0e4e-841a-1f3abfcf7901
> Ancestors: Collections-nice.157
>
> Apply patch from http://bugs.squeak.org/view.php?id=6535
> keyBlock and sortBlock are lost when creating a collection of the same species.
>
> Unlike http://bugs.squeak.org/view.php?id=6535 initial solution, avoid defining a basicShallowCopy.
> This requires using postCopy paradigm as pre-requisite.
>
> If new methods are added before old methods are modified, this patch should load without problem in MC, else I will revert...
>
> =============== Diff against Collections-nice.157 ===============
>
> Item was added:
> + ----- Method: Set>>copyEmpty (in category 'copying') -----
> + copyEmpty
> +       "Answer an empty copy of this collection"
> +
> +       "Note: this code could be moved to super"
> +
> +       ^self species new!
>
> Item was added:
> + ----- Method: Set>>select: (in category 'enumerating') -----
> + select: aBlock
> +       "Use copyEmpty instead of self species new to give subclasses a chance to initialize additional inst vars."
> +
> +       "Note: this code could be moved to super"
> +
> +       | newCollection |
> +       newCollection := self copyEmpty.
> +       self do: [:each | (aBlock value: each) ifTrue: [newCollection add: each]].
> +       ^newCollection!
>
> Item was added:
> + ----- Method: PluggableDictionary>>copyEmpty (in category 'copying') -----
> + copyEmpty
> +       ^super copyEmpty
> +               hashBlock: hashBlock;
> +               equalBlock: equalBlock!
>
> Item was changed:
>  ----- Method: Dictionary>>select: (in category 'enumerating') -----
>  select: aBlock
>        "Evaluate aBlock with each of my values as the argument. Collect into a new dictionary, only those associations for which aBlock evaluates to true."
>
>        | newCollection |
> +       newCollection := self copyEmpty.
> -       newCollection := self species new.
>        self associationsDo: [ :each |
>                (aBlock value: each value) ifTrue: [
>                        newCollection add: each copy ] ].
>        ^newCollection!
>
> Item was added:
> + ----- Method: PluggableSet>>copyEmpty (in category 'copying') -----
> + copyEmpty
> +       ^super copyEmpty
> +               hashBlock: hashBlock;
> +               equalBlock: equalBlock!
>
> Item was added:
> + ----- Method: KeyedSet>>copyEmpty (in category 'copying') -----
> + copyEmpty
> +       ^super copyEmpty
> +               keyBlock: keyBlock!
>
> Item was changed:
>  ----- Method: OrderedCollection>>copyFrom:to: (in category 'copying') -----
>  copyFrom: startIndex to: endIndex
>        "Answer a copy of the receiver that contains elements from position
>        startIndex to endIndex."
>
> +       ^self shallowCopy postCopyFrom: startIndex to: endIndex!
> -       | targetCollection |
> -       endIndex < startIndex ifTrue: [^self species new: 0].
> -       targetCollection := self species new: endIndex + 1 - startIndex.
> -       startIndex to: endIndex do: [:index | targetCollection addLast: (self at: index)].
> -       ^ targetCollection!
>
> Item was added:
> + ----- Method: OrderedCollection>>postCopyFrom:to: (in category 'copying') -----
> + postCopyFrom: startIndex to: endIndex
> +       "finish copying the array in a certain range."
> +
> +       endIndex < startIndex ifFalse: [
> +               "Because actual size of the array may be greater than used size,
> +               postCopyFrom:to: may fail to fail and answer an incorrect result
> +               if this sanity check were not applied"
> +               (startIndex between: 1 and: self size) ifFalse: [^self error: 'startIndex is out of bounds'].
> +               (endIndex between: 1 and: self size) ifFalse: [^self error: 'endIndex is out of bounds']].
> +
> +       "Add a protection that lacks in Array>>postcopy"
> +       array := array copyFrom: startIndex + firstIndex - 1 to: (endIndex max: startIndex - 1) + firstIndex - 1.
> +       firstIndex := 1.
> +       lastIndex := array size!
>
>
>



More information about the Squeak-dev mailing list