[Pkg] The Trunk: Kernel-ul.606.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Jul 18 18:18:58 UTC 2011
Levente Uzonyi uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-ul.606.mcz
==================== Summary ====================
Name: Kernel-ul.606
Author: ul
Time: 18 July 2011, 5:26:44.832 pm
UUID: 765d93ce-2226-a942-abee-bd2f45d192f6
Ancestors: Kernel-nice.605
Copy the lowBit per byte table from SmallInteger >> #lowBit to a class variable in Integer, so it can also be used from other methods without duplication.
=============== Diff against Kernel-nice.605 ===============
Item was changed:
Number subclass: #Integer
instanceVariableNames: ''
+ classVariableNames: 'LowBitPerByteTable'
- classVariableNames: ''
poolDictionaries: ''
category: 'Kernel-Numbers'!
!Integer commentStamp: '<historical>' prior: 0!
I am a common abstract superclass for all Integer implementations. My implementation subclasses are SmallInteger, LargePositiveInteger, and LargeNegativeInteger.
Integer division consists of:
/ exact division, answers a fraction if result is not a whole integer
// answers an Integer, rounded towards negative infinity
\\ is modulo rounded towards negative infinity
quo: truncated division, rounded towards zero!
Item was changed:
----- Method: Integer class>>initialize (in category 'class initialization') -----
initialize "Integer initialize"
"Ensure we have the right compact class index"
"LPI has been a compact class forever - just ensure basic correctness"
(LargePositiveInteger indexIfCompact = 5) ifFalse:[
(Smalltalk compactClassesArray at: 5)
ifNil:[LargePositiveInteger becomeCompactSimplyAt: 5]
ifNotNil:[self error: 'Unexpected compact class setup']].
"Cog requires LNI to be compact at 4 (replacing PseudoContext)"
(LargeNegativeInteger indexIfCompact = 4) ifFalse:[
"PseudoContext will likely get removed at some point so write this test
without introducing a hard dependency"
(Smalltalk compactClassesArray at: 4) name == #PseudoContext
ifTrue:[Smalltalk compactClassesArray at: 4 put: nil].
(Smalltalk compactClassesArray at: 4)
ifNil:[LargeNegativeInteger becomeCompactSimplyAt: 4]
ifNotNil:[self error: 'Unexpected compact class setup']].
+
+ self initializeLowBitPerByteTable
!
Item was added:
+ ----- Method: Integer class>>initializeLowBitPerByteTable (in category 'class initialization') -----
+ initializeLowBitPerByteTable
+ "Initialize LowBitPerByteTable which is a ByteArray that contains the index of the lowest set bit of the integers between 1 and 255. It's defined as a class variable because it's used from the instance side and subclasses."
+ "The low bits table can be obtained with:
+ ((1 to: 8) inject: #[1] into: [:lowBits :rank | (lowBits copy at: 1 put: lowBits first + 1; yourself) , lowBits]) allButFirst
+ or with it's symmetric pair:
+ ((1 to: 8) inject: #[1] into: [:lowBits :rank | lowBits, (lowBits copy atLast: 1 put: lowBits last + 1; yourself)]) allButLast."
+
+ LowBitPerByteTable := #[1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 7 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 8 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 7 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1]!
More information about the Packages
mailing list