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! |
Free forum by Nabble | Edit this page |