The Trunk: Collections-ul.729.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.729.mcz

commits-2
Levente Uzonyi uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-ul.729.mcz

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

Name: Collections-ul.729
Author: ul
Time: 25 December 2016, 4:16:33.349302 pm
UUID: dedb0ac7-ea11-42b9-8a91-2839a52866c7
Ancestors: Collections-nice.728

- minor OrderedCollection optimizations

=============== Diff against Collections-nice.728 ===============

Item was changed:
  ----- Method: OrderedCollection>>asArray (in category 'converting') -----
  asArray
  "Overriden for speed"
 
+ | result size |
+ result := Array new: (size := self size).
- | result |
- result := Array new: self size.
  result
  replaceFrom: 1
+ to: size
- to: result size
  with: array
  startingAt: firstIndex.
  ^result!

Item was changed:
  ----- Method: OrderedCollection>>makeRoomAtFirst (in category 'private') -----
  makeRoomAtFirst
  "Make some empty slots at the front of the array. If we have more than 50% free space, then just move the elements, so that the first 50% of the slots are free, otherwise add new free slots to the front by growing. Precondition: firstIndex = 1"
 
+ | tally newFirstIndex newLastIndex capacity |
- | tally newFirstIndex newLastIndex |
  tally := self size.
+ capacity := array size.
+ tally * 2 >= capacity ifTrue: [ ^self growAtFirst ].
+ tally = 0 ifTrue: [ ^self resetTo: capacity + 1 ].
+ newFirstIndex := capacity // 2 + 1.
- tally * 2 >= array size ifTrue: [ ^self growAtFirst ].
- tally = 0 ifTrue: [ ^self resetTo: array size + 1 ].
- newFirstIndex := array size // 2 + 1.
  newLastIndex := newFirstIndex - firstIndex + lastIndex.
  0 to: tally - 1 do: [ :offset |
  array at: newLastIndex - offset put: (array at: lastIndex - offset) ].
  array from: firstIndex to: newFirstIndex - 1 put: nil.
  firstIndex := newFirstIndex.
  lastIndex := newLastIndex!

Item was added:
+ ----- Method: OrderedCollection>>replace: (in category 'enumerating') -----
+ replace: aBlock
+ "Evaluate aBlock with each of my elements as the argument. Collect the resulting values into myself.
+ Override superclass in order to work on the internal array directly."
+
+ firstIndex to: lastIndex do: [ :index |
+ array at: index put: (aBlock value: (array at: index)) ]!

Item was changed:
  ----- Method: OrderedCollection>>with:collect: (in category 'enumerating') -----
  with: otherCollection collect: twoArgBlock
  "Collect and return the result of evaluating twoArgBlock with
  corresponding elements from this collection and otherCollection."
+
+ | result offset size |
+ (size := self size) = otherCollection size ifFalse: [ self error: 'otherCollection must be the same size' ].
+ result := self species new: size.
+ offset := 1 - firstIndex.
+ firstIndex to: lastIndex do: [ :index |
+ result addLast: (
+ twoArgBlock
+ value: (array at: index)
+ value: (otherCollection at: index + offset)) ].
+ ^result!
- | result |
- otherCollection size = self size ifFalse: [self error: 'otherCollection must be the same size'].
- result := self species new: self size.
- 1 to: self size do:
- [:index | result addLast: (twoArgBlock value: (self at: index)
- value: (otherCollection at: index))].
- ^ result!

Item was changed:
  ----- Method: OrderedCollection>>withIndexCollect: (in category 'enumerating') -----
  withIndexCollect: elementAndIndexBlock
  "Just like with:collect: except that the iteration index supplies the second argument to the block. Override superclass in order to use addLast:, not at:put:."
 
+ | newCollection offset |
- | newCollection |
  newCollection := self species new: self size.
+ offset := 1 - firstIndex.
  firstIndex to: lastIndex do:
  [:index |
  newCollection addLast: (elementAndIndexBlock
  value: (array at: index)
+ value: index + offset) ].
- value: index - firstIndex + 1)].
  ^ newCollection!