[Pkg] The Trunk: Collections-ul.380.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Sep 12 02:37:18 UTC 2010
Levente Uzonyi uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-ul.380.mcz
==================== Summary ====================
Name: Collections-ul.380
Author: ul
Time: 12 September 2010, 4:14:05.604 am
UUID: 0b9b1e03-48cd-4140-9a41-c4e521e9ae24
Ancestors: Collections-ul.379
- faster non-primitive String "primitives" by using #basicAt: instead of #at: + #asInteger/#asciiValue
- revert to #to:do: instead of a #whileTrue: in #indexOfAscii:inString:startingAt: , because that's also inlined even if the receiver type is unknown
=============== Diff against Collections-ul.379 ===============
Item was changed:
----- Method: String class>>compare:with:collated: (in category 'primitives') -----
compare: string1 with: string2 collated: order
"Return 1, 2 or 3, if string1 is <, =, or > string2, with the collating order of characters given by the order array."
| len1 len2 c1 c2 |
order == nil ifTrue: [
len1 := string1 size.
len2 := string2 size.
1 to: (len1 min: len2) do:[:i |
+ c1 := string1 basicAt: i.
+ c2 := string2 basicAt: i.
- c1 := (string1 at: i) asInteger.
- c2 := (string2 at: i) asInteger.
c1 = c2 ifFalse: [c1 < c2 ifTrue: [^ 1] ifFalse: [^ 3]].
].
len1 = len2 ifTrue: [^ 2].
len1 < len2 ifTrue: [^ 1] ifFalse: [^ 3].
].
len1 := string1 size.
len2 := string2 size.
1 to: (len1 min: len2) do:[:i |
+ c1 := string1 basicAt: i.
+ c2 := string2 basicAt: i.
- c1 := (string1 at: i) asInteger.
- c2 := (string2 at: i) asInteger.
c1 < 256 ifTrue: [c1 := order at: c1 + 1].
c2 < 256 ifTrue: [c2 := order at: c2 + 1].
c1 = c2 ifFalse:[c1 < c2 ifTrue: [^ 1] ifFalse: [^ 3]].
].
len1 = len2 ifTrue: [^ 2].
len1 < len2 ifTrue: [^ 1] ifFalse: [^ 3].
!
Item was changed:
----- Method: String class>>findFirstInString:inSet:startingAt: (in category 'primitives') -----
findFirstInString: aString inSet: inclusionMap startingAt: start
"Trivial, non-primitive version"
| i stringSize ascii more |
inclusionMap size ~= 256 ifTrue: [^ 0].
stringSize := aString size.
more := true.
i := start - 1.
[more and: [(i := i + 1) <= stringSize]] whileTrue: [
+ ascii := aString basicAt: i.
- ascii := (aString at: i) asciiValue.
more := ascii < 256 ifTrue: [(inclusionMap at: ascii + 1) = 0] ifFalse: [true].
].
i > stringSize ifTrue: [^ 0].
^ i!
Item was changed:
----- Method: String class>>indexOfAscii:inString:startingAt: (in category 'primitives') -----
indexOfAscii: anInteger inString: aString startingAt: start
"Trivial, non-primitive version"
+ start to: aString size do: [ :index |
- | index endIndex |
- endIndex := aString size.
- index := start - 1.
- [ (index := index + 1) <= endIndex ] whileTrue: [
(aString basicAt: index) = anInteger ifTrue: [ ^index ] ].
^0
!
Item was changed:
----- Method: String class>>stringHash:initialHash: (in category 'primitives') -----
stringHash: aString initialHash: speciesHash
+
| stringSize hash low |
stringSize := aString size.
+ hash := speciesHash bitAnd: 16r0FFFFFFF.
+ 1 to: stringSize do: [ :pos |
+ hash := hash + (aString basicAt: pos).
- hash := speciesHash bitAnd: 16rFFFFFFF.
- 1 to: stringSize do: [:pos |
- hash := hash + (aString at: pos) asInteger.
"Begin hashMultiply"
low := hash bitAnd: 16383.
+ hash := (16r260D * low + ((16r260D * (hash // 16384) + (16r0065 * low) bitAnd: 16383) * 16384)) bitAnd: 16r0FFFFFFF ].
+ ^hash.
+
+
- hash := (16r260D * low + ((16r260D * (hash bitShift: -14) + (16r0065 * low) bitAnd: 16383) * 16384)) bitAnd: 16r0FFFFFFF.
- ].
- ^ hash.
!
Item was changed:
----- Method: String class>>translate:from:to:table: (in category 'primitives') -----
translate: aString from: start to: stop table: table
"Trivial, non-primitive version"
+
+ start to: stop do: [ :i |
+ | char |
+ (char := aString basicAt: i) < 256 ifTrue: [
+ aString at: i put: (table at: char+1) ] ].
- | char |
- start to: stop do: [:i |
- char := (aString at: i) asInteger.
- char < 256 ifTrue: [aString at: i put: (table at: char+1)].
- ].
!
More information about the Packages
mailing list