[Pkg] The Trunk: Kernel-ul.522.mcz

commits at source.squeak.org commits at source.squeak.org
Sun Dec 12 15:23:08 UTC 2010


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

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

Name: Kernel-ul.522
Author: ul
Time: 8 December 2010, 4:08:19.384 am
UUID: 6927b03c-21df-1746-9a0d-115b717a5e40
Ancestors: Kernel-ul.521

- implemented Fraction >> #negative and ScaledDecimal >> #negative for better performance. These methods don't allocate new objects.
- reimplemented SmallInteger printing methods (printOn:base:*) without String allocation. They are as fast as the previous versions were for base 10.
- reimplemented ScaledDecimal printing. It avoids object allocations and has better performance than the previous version. ScaledDecimals can also be printed without the scale part by using #printFractionAsDecimalOn:.

=============== Diff against Kernel-ul.521 ===============

Item was added:
+ ----- Method: Fraction>>negative (in category 'testing') -----
+ negative
+ 
+ 	^numerator negative!

Item was added:
+ ----- Method: ScaledDecimal>>negative (in category 'testing') -----
+ negative
+ 
+ 	^fraction negative!

Item was added:
+ ----- Method: ScaledDecimal>>printFractionAsDecimalOn: (in category 'printing') -----
+ printFractionAsDecimalOn: stream 
+ 
+ 	| aFraction integerPart fractionPart |
+ 	fraction negative
+ 		ifFalse: [ aFraction := fraction ]
+ 		ifTrue: [
+ 			aFraction := fraction negated.
+ 			stream nextPut: $- ].
+ 	integerPart := aFraction truncated.
+ 	integerPart printOn: stream.
+ 	scale = 0 ifTrue: [ ^self ].
+ 	stream nextPut: $..
+ 	fractionPart := ((aFraction - integerPart) * (10 raisedToInteger: scale)) truncated.
+ 	fractionPart
+ 		printOn: stream
+ 		base: 10
+ 		length: scale
+ 		padded: true!

Item was changed:
  ----- Method: ScaledDecimal>>printOn: (in category 'printing') -----
+ printOn: stream
+ 
+ 	self
+ 		printFractionAsDecimalOn: stream;
+ 		printScaleOn: stream!
- printOn: aStream 
- 	"Reimplementation - Object 'printing' method."
- 	| aFraction tmpFractionPart |
- 	self < 0 ifTrue: [aStream nextPut: $-].
- 	aFraction := fraction abs.
- 	aStream nextPutAll: aFraction truncated printString.
- 	scale = 0 ifTrue: [^ aStream nextPutAll: 's0'].
- 	aStream nextPut: $..
- 	tmpFractionPart := aFraction fractionPart.
- 	1 to: scale
- 		do: 
- 			[:dummy | 
- 			tmpFractionPart := tmpFractionPart * 10.
- 			aStream nextPut: (Character digitValue: tmpFractionPart truncated).
- 			tmpFractionPart := tmpFractionPart fractionPart].
- 	aStream nextPut: $s.
- 	scale printOn: aStream!

Item was added:
+ ----- Method: ScaledDecimal>>printScaleOn: (in category 'printing') -----
+ printScaleOn: stream
+ 
+ 	stream nextPut: $s.
+ 	scale printOn: stream!

Item was changed:
  ----- Method: SmallInteger>>printOn:base: (in category 'printing') -----
+ printOn: stream base: base 
- printOn: aStream base: b 
  	"Append a representation of this number in base b on aStream."
  
+ 	self printOn: stream base: base length: 0 padded: false!
- 	self < 0
- 		ifTrue: [aStream nextPut: $-.
- 			aStream nextPutAll: (self negated printStringBase: b).
- 			^self].
- 
- 	"allocating a String seems faster than streaming for SmallInteger"
- 	aStream nextPutAll: (self printStringBase: b)!

Item was added:
+ ----- Method: SmallInteger>>printOn:base:length:padded: (in category 'printing') -----
+ printOn: stream base: base length: minimumLength padded: padWithZeroes
+ 
+ 	| n numberOfDigits totalLength divisor |
+ 	self < 0
+ 		ifTrue: [
+ 			n := self negated.
+ 			totalLength := 1 ]
+ 		ifFalse: [
+ 			n := self.
+ 			totalLength := 0 ].
+ 	numberOfDigits := n numberOfDigitsInBase: base.
+ 	totalLength := totalLength + numberOfDigits.
+ 	padWithZeroes ifFalse: [
+ 		[ totalLength < minimumLength ] whileTrue: [
+ 			stream space.
+ 			totalLength := totalLength + 1 ] ].
+ 	n = self ifFalse: [ stream nextPut: $- ].
+ 	padWithZeroes ifTrue: [
+ 		[ totalLength < minimumLength ] whileTrue: [
+ 			stream nextPut: $0.
+ 			totalLength := totalLength + 1 ] ].
+ 	divisor := (base raisedToInteger: numberOfDigits - 1).
+ 	[ divisor > 0 ] whileTrue: [
+ 		| digit |
+ 		digit := n // divisor.
+ 		stream nextPut: ('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' at: digit + 1).
+ 		n := n - (digit * divisor).
+ 		divisor := divisor // base ]!

Item was changed:
  ----- Method: SmallInteger>>printOn:base:nDigits: (in category 'printing') -----
  printOn: aStream base: b nDigits: n 
  	"Append a representation of this number in base b on aStream using nDigits.
  	self must be positive."
  
+ 	self printOn: aStream base: b length: n padded: true!
- 	"allocating a String seems faster than streaming for SmallInteger"
- 	aStream nextPutAll: (self printStringBase: b nDigits: n)!



More information about the Packages mailing list