[Pkg] The Trunk: Balloon-fbs.22.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Jul 25 07:19:36 UTC 2013
Frank Shearar uploaded a new version of Balloon to project The Trunk:
http://source.squeak.org/trunk/Balloon-fbs.22.mcz
==================== Summary ====================
Name: Balloon-fbs.22
Author: fbs
Time: 25 July 2013, 8:19:08.919 am
UUID: 373e2c3f-9ac6-764b-8bed-b07b351f8144
Ancestors: Balloon-nice.21
SmalltalkImage current -> Smalltalk.
=============== Diff against Balloon-nice.21 ===============
Item was changed:
----- Method: ShortIntegerArray class>>startUpFrom: (in category 'class initialization') -----
startUpFrom: anImageSegment
"In this case, do we need to swap word halves when reading this segement?"
+ ^ (Smalltalk endianness) ~~ (anImageSegment endianness)
- ^ (SmalltalkImage current endianness) ~~ (anImageSegment endianness)
ifTrue: [Message selector: #swapShortObjects] "will be run on each instance"
ifFalse: [nil].
!
Item was changed:
----- Method: ShortIntegerArray>>restoreEndianness (in category 'objects from disk') -----
restoreEndianness
"This word object was just read in from a stream. It was stored in Big Endian (Mac) format. Swap each pair of bytes (16-bit word), if the current machine is Little Endian.
Why is this the right thing to do? We are using memory as a byteStream. High and low bytes are reversed in each 16-bit word, but the stream of words ascends through memory. Different from a Bitmap."
| hack blt |
+ Smalltalk isLittleEndian ifTrue: [
- SmalltalkImage current isLittleEndian ifTrue: [
"The implementation is a hack, but fast for large ranges"
hack := Form new hackBits: self.
blt := (BitBlt toForm: hack) sourceForm: hack.
blt combinationRule: Form reverse. "XOR"
blt sourceY: 0; destY: 0; height: hack height; width: 1.
blt sourceX: 0; destX: 1; copyBits. "Exchange bytes 0 and 1"
blt sourceX: 1; destX: 0; copyBits.
blt sourceX: 0; destX: 1; copyBits.
blt sourceX: 2; destX: 3; copyBits. "Exchange bytes 2 and 3"
blt sourceX: 3; destX: 2; copyBits.
blt sourceX: 2; destX: 3; copyBits
].
!
Item was changed:
----- Method: ShortIntegerArray>>writeOn: (in category 'objects from disk') -----
writeOn: aStream
aStream nextInt32Put: self basicSize.
1 to: self basicSize do: [ :i | | w |
w := self basicAt: i.
+ Smalltalk isLittleEndian
- SmalltalkImage current isLittleEndian
ifFalse: [ aStream nextNumber: 4 put: w ]
ifTrue: [ aStream
nextPut: (w digitAt: 2);
nextPut: (w digitAt: 1);
nextPut: (w digitAt: 4);
nextPut: (w digitAt: 3) ]].!
Item was changed:
----- Method: ShortRunArray class>>startUpFrom: (in category 'class initialization') -----
startUpFrom: anImageSegment
"In this case, do we need to swap word halves when reading this segement?"
+ ^Smalltalk endianness ~~ anImageSegment endianness
- ^SmalltalkImage current endianness ~~ anImageSegment endianness
ifTrue: [Message selector: #swapRuns "will be run on each instance"]
ifFalse: [nil]!
Item was changed:
----- Method: ShortRunArray>>restoreEndianness (in category 'objects from disk') -----
restoreEndianness
"This word object was just read in from a stream. It was stored in Big Endian (Mac) format. Swap each pair of bytes (16-bit word), if the current machine is Little Endian.
Why is this the right thing to do? We are using memory as a byteStream. High and low bytes are reversed in each 16-bit word, but the stream of words ascends through memory. Different from a Bitmap."
| w b1 b2 b3 b4 |
+ Smalltalk isLittleEndian ifTrue: [
- SmalltalkImage current isLittleEndian ifTrue: [
1 to: self basicSize do: [:i |
w := self basicAt: i.
b1 := w digitAt: 1.
b2 := w digitAt: 2.
b3 := w digitAt: 3.
b4 := w digitAt: 4.
w := (b1 << 24) + (b2 << 16) + (b3 << 8) + b4.
self basicAt: i put: w.
]
].
!
More information about the Packages
mailing list