[Pkg] The Trunk: Collections-ul.259.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Dec 22 18:44:26 UTC 2009


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

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

Name: Collections-ul.259
Author: ul
Time: 22 December 2009, 7:44:15 am
UUID: a72038cf-e6a6-9a41-ae33-4a060f20af91
Ancestors: Collections-ar.256, Collections-nice.256

- merged Collections-nice.256

=============== Diff against Collections-ar.256 ===============

Item was changed:
  ----- Method: Interval>>reverseDo: (in category 'enumerating') -----
  reverseDo: aBlock 
+ 	"Evaluate aBlock for each element of my interval, in reverse order.
+ 	Implementation notes: see do: for an explanation on loop detail"
+ 
+ 	| aValue index |
+ 	index := self size.
+ 	[index > 0]
+ 		whileTrue: [
+ 			index := index - 1.
+ 			aValue := start + (index * step).
+ 			aBlock value: aValue]!
- 	"Evaluate aBlock for each element of my interval, in reverse order."
- 	| aValue |
- 	aValue := self last.
- 	step < 0
- 		ifTrue: [[start >= aValue]
- 				whileTrue: [aBlock value: aValue.
- 					aValue := aValue - step]]
- 		ifFalse: [[start <= aValue]
- 				whileTrue: [aBlock value: aValue.
- 					aValue := aValue - step]]!

Item was changed:
  ----- Method: Interval>>indexOf:startingAt:ifAbsent: (in category 'accessing') -----
  indexOf: anElement startingAt: startIndex ifAbsent: exceptionBlock 
  	"startIndex is an positive integer, the collection index where the search is started."
  	"during the computation of val , floats are only used when the receiver	contains floats"
  
  	| index val |
  	(self rangeIncludes: anElement)
  		ifFalse: [^ exceptionBlock value].
  	val := anElement - self first / self increment.
  	val isFloat
  		ifTrue: [(val - val rounded) abs * 100000000 < 1
  				ifTrue: [index := val rounded + 1]
  				ifFalse: [^ exceptionBlock value]]
  		ifFalse: [val isInteger
  				ifTrue: [index := val + 1]
  				ifFalse: [^ exceptionBlock value]].
  	"finally, the value of startIndex comes into play:"
+ 	^ (index between: startIndex and: self size)
+ 		ifTrue: [index]
+ 		ifFalse: [exceptionBlock value]!
- 	^ index < startIndex
- 		ifTrue: [exceptionBlock value]
- 		ifFalse: [index]!

Item was changed:
  ----- Method: Interval>>do: (in category 'enumerating') -----
+ do: aBlock 
+ 	"Evaluate aBlock for each value of the interval.
+ 	Implementation note: instead of repeatedly incrementing the value
+ 	    aValue := aValue + step.
+ 	until stop is reached,
+ 	We prefer to recompute value from start
+ 	    aValue := start + (index * step).
+ 	This is better for floating points accuracy, while not degrading Integer and Fraction speed too much.
+ 	Moreover, this is consistent with methods #at: and #size"
+ 	
+ 	| aValue index size |
+ 	index := 0.
+ 	size := self size.
+ 	[index < size]
+ 		whileTrue: [aValue := start + (index * step).
+ 			index := index + 1.
+ 			aBlock value: aValue]!
- do: aBlock
- 
- 	| aValue |
- 	aValue := start.
- 	step < 0
- 		ifTrue: [[stop <= aValue]
- 				whileTrue: 
- 					[aBlock value: aValue.
- 					aValue := aValue + step]]
- 		ifFalse: [[stop >= aValue]
- 				whileTrue: 
- 					[aBlock value: aValue.
- 					aValue := aValue + step]]!



More information about the Packages mailing list