[squeak-dev] The Inbox: Collections-tfel.131.mcz
Bert Freudenberg
bert at freudenbergs.de
Mon Sep 14 12:24:38 UTC 2009
On 14.09.2009, at 14:00, commits at source.squeak.org wrote:
> Tim Felgentreff uploaded a new version of Collections to project The
> Inbox:
> http://source.squeak.org/inbox/Collections-tfel.131.mcz
>
> ==================== Summary ====================
>
> Name: Collections-tfel.131
> Author: tfel
> Time: 14 September 2009, 2:00:17 am
> UUID: 61c6b5e1-32e7-4ae0-8934-d347b7fa2f29
> Ancestors: Collections-tfel.130
>
> As the previous, just fixing for OrderedCollection subclasses. Tried
> to make it shorter than it can be
>
> =============== Diff against Collections-tfel.130 ===============
>
> Item was changed:
> ----- Method: SequenceableCollection>>flatten (in category
> 'converting') -----
> flatten
> "Remove all nesting of myself from me (Strings are not flattened
> though). E.g.: {3 .4 .{2 .4 .{'hi'} .'ho'}} flatten = {3 .4 .2 .
> 4 .'hi' .'ho'}"
> | flattened subFlattened index |
> + flattened := Array
> - flattened := self species
> new: (self inject: 0 into: [:subTotal :next |
> (next isCollection and: [next isString not])
> ifTrue: [subTotal + next flatten size]
> ifFalse: [subTotal + 1]]).
> index := 1.
> self do: [:each |
> (each isCollection and: [each isString not])
> ifTrue: [
> subFlattened := each flatten.
> flattened
> atAll: (index to: index + subFlattened size - 1)
> putAll: subFlattened.
> index := index + subFlattened size]
> ifFalse: [
> flattened at: index put: each.
> index := index + 1]].
> + ^ self species newFrom: flattened!
> - ^ flattened!
IMHO this should use a stream to flatten (using, e.g. #flattenOn:).
Recursing *twice* into each subcollection is neither more memory nor
time-efficient, but just needlessly complex.
- Bert -
More information about the Squeak-dev
mailing list
|