[squeak-dev] The Trunk: Collections-eem.808.mcz
Levente Uzonyi
leves at caesar.elte.hu
Fri Oct 26 22:06:01 UTC 2018
String already has a method for this use case with a similar name:
#hashWithInitialHash:.
Should we keep the old name and use it for ByteArrays too or are the more
specific names #bytesHashWithInitialHash: and
#stringHashWithInitialHash better?
Levente
On Mon, 22 Oct 2018, commits at source.squeak.org wrote:
> Eliot Miranda uploaded a new version of Collections to project The Trunk:
> http://source.squeak.org/trunk/Collections-eem.808.mcz
>
> ==================== Summary ====================
>
> Name: Collections-eem.808
> Author: eem
> Time: 22 October 2018, 4:54:43.989805 pm
> UUID: c6b15e95-b365-4ea0-8211-71ec7f55084b
> Ancestors: Collections-ul.807
>
> Faster ByteString/ByteArray hashing. The VM will accept either 1 or 2 args for the primitiveStringHash primitive so it can be used on the instance size, avoiding a little overhead.
>
> =============== Diff against Collections-ul.807 ===============
>
> Item was added:
> + ----- Method: ByteArray>>bytesHashWithInitialHash: (in category 'private') -----
> + bytesHashWithInitialHash: speciesHash
> + "Answer the hash of a byte-indexed array, using speciesHash as the initial value.
> + See SmallInteger>>hashMultiply."
> + <primitive: 'primitiveStringHash' module: 'MiscPrimitivePlugin'>
> +
> + ^String stringHash: self initialHash: speciesHash!
>
> Item was changed:
> ----- Method: ByteArray>>hash (in category 'comparing') -----
> hash
> "#hash is implemented, because #= is implemented"
>
> + ^self bytesHashWithInitialHash: self species hash!
> - ^self class
> - hashBytes: self
> - startingWith: self species hash!
>
> Item was added:
> + ----- Method: ByteString>>stringHashWithInitialHash: (in category 'private') -----
> + stringHashWithInitialHash: speciesHash
> + "Answer the hash of a byte-indexed string, using speciesHash as the initial value.
> + See SmallInteger>>hashMultiply."
> + <primitive: 'primitiveStringHash' module: 'MiscPrimitivePlugin'>
> +
> + ^super stringHashWithInitialHash: speciesHash!
>
> Item was added:
> + ----- Method: ByteSymbol>>stringHashWithInitialHash: (in category 'private') -----
> + stringHashWithInitialHash: speciesHash
> + "Answer the hash of a byte-indexed string, using speciesHash as the initial value.
> + See SmallInteger>>hashMultiply."
> + <primitive: 'primitiveStringHash' module: 'MiscPrimitivePlugin'>
> +
> + ^super stringHashWithInitialHash: speciesHash!
>
> Item was changed:
> ----- Method: String>>hash (in category 'comparing') -----
> hash
> "#hash is implemented, because #= is implemented"
> "ar 4/10/2005: I had to change this to use ByteString hash as initial
> hash in order to avoid having to rehash everything and yet compute
> the same hash for ByteString and WideString.
> md 16/10/2006: use identityHash as initialHash, as behavior hash will
> use String hash (name) to have a better hash soon.
> eem 4/17/2017 it's not possible to use String hash (name) for the
> initial hash because that would be recursive."
> + ^self stringHashWithInitialHash: ByteString identityHash!
> - ^self class stringHash: self initialHash: ByteString identityHash!
>
> Item was added:
> + ----- Method: String>>stringHashWithInitialHash: (in category 'private') -----
> + stringHashWithInitialHash: speciesHash
> + "Answer the hash of a byte-indexed string, using speciesHash as the initial value.
> + See SmallInteger>>hashMultiply."
> + | hash |
> + hash := speciesHash bitAnd: 16r0FFFFFFF.
> + 1 to: self size do:
> + [:pos |
> + hash := (hash + (self basicAt: pos)) hashMultiply].
> + ^hash!
More information about the Squeak-dev
mailing list
|