[Pkg] The Trunk: Collections-eem.745.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Apr 18 18:39:56 UTC 2017
Eliot Miranda uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-eem.745.mcz
==================== Summary ====================
Name: Collections-eem.745
Author: eem
Time: 18 April 2017, 11:39:44.905833 am
UUID: c26d3130-3164-4fdb-b302-858a554d8d8d
Ancestors: Collections-eem.744
Clarify the two primitiveStringHash uses. The one in ByteArray class is translated to a primitive in MiscPrimitivePlugin. The one in ByteString class is not; it uses the translated primitive derived from ByteArray class>>hashBytes:startingWith:.
(N.B. Requires a soon-to-be-committed change to VMMaker to accet the int decl for speciesHash.")
=============== Diff against Collections-eem.744 ===============
Item was changed:
----- Method: ByteArray class>>hashBytes:startingWith: (in category 'byte based hash') -----
hashBytes: aByteArray startingWith: speciesHash
+ "Answer the hash of a byte-indexed collection, using speciesHash as the initial value.
+ See SmallInteger>>hashMultiply.
- "Answer the hash of a byte-indexed collection,
- using speciesHash as the initial value.
- See SmallInteger>>hashMultiply.
+ The primitive should be renamed at a suitable point in the future"
- The primitive should be renamed at a
- suitable point in the future"
-
- | byteArraySize hash low |
<primitive: 'primitiveStringHash' module: 'MiscPrimitivePlugin'>
+ | byteArraySize hash |
+ <var: 'aByteArray' type: #'unsigned char *'>
+ <var: 'speciesHash' type: #int>
- <var: #aHash declareC: 'int speciesHash'>
- <var: #aByteArray declareC: 'unsigned char *aByteArray'>
byteArraySize := aByteArray size.
hash := speciesHash bitAnd: 16rFFFFFFF.
+ 1 to: byteArraySize do:
+ [:pos |
- 1 to: byteArraySize do: [:pos |
hash := hash + (aByteArray basicAt: pos).
+ "Inlined hashMultiply, written this way for translation to C."
+ hash := hash * 1664525 bitAnd: 16r0FFFFFFF].
+ ^hash!
- "Begin hashMultiply"
- low := hash bitAnd: 16383.
- hash := (16r260D * low + ((16r260D * (hash bitShift: -14) + (16r0065 * low) bitAnd: 16383) * 16384)) bitAnd: 16r0FFFFFFF.
- ].
- ^ hash!
Item was changed:
----- Method: ByteString class>>stringHash:initialHash: (in category 'primitives') -----
stringHash: aString initialHash: speciesHash
+ "Answer the hash of a byte-indexed string, using speciesHash as the initial value.
+ See SmallInteger>>hashMultiply."
-
- | stringSize hash low |
<primitive: 'primitiveStringHash' module: 'MiscPrimitivePlugin'>
+ | hash |
-
- <var: #aHash declareC: 'int speciesHash'>
- <var: #aString declareC: 'unsigned char *aString'>
-
- stringSize := aString size.
hash := speciesHash bitAnd: 16rFFFFFFF.
+ 1 to: aString size do:
+ [:pos |
+ hash := (hash + (aString basicAt: pos)) hashMultiply].
+ ^hash!
- 1 to: stringSize do: [:pos |
- hash := hash + (aString basicAt: pos).
- "Begin hashMultiply"
- low := hash bitAnd: 16383.
- hash := (16r260D * low + ((16r260D * (hash bitShift: -14) + (16r0065 * low) bitAnd: 16383) * 16384)) bitAnd: 16r0FFFFFFF.
- ].
- ^ hash!
More information about the Packages
mailing list