[squeak-dev] The Inbox: Collections-cbc.810.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Oct 29 00:16:30 UTC 2018


Chris Cunningham uploaded a new version of Collections to project The Inbox:
http://source.squeak.org/inbox/Collections-cbc.810.mcz

==================== Summary ====================

Name: Collections-cbc.810
Author: cbc
Time: 28 October 2018, 5:15:56.960512 pm
UUID: 729c4dd2-f677-3c40-9ded-4a407a71f824
Ancestors: Collections-topa.809

Do NOT move to trunk!
Various option for fixing the internval hash issue related to collectionsTests cbc.296.

Some explanation to go to mailing list - this is so interested folks can try out the code.

=============== Diff against Collections-topa.809 ===============

Item was added:
+ ----- Method: Array>>hashBetterFastIntervalCompatible (in category 'comparing') -----
+ hashBetterFastIntervalCompatible
+ 	| hash |
+ 	self size < 48 ifTrue: [^super hash]. "Just check every element."
+ 	hash := self species hash.
+ 	1 to: 16 do: [:i| hash := (hash + (self at: i) hash) hashMultiply].
+ 	self size - 15 to: self size do: [:i| hash := (hash + (self at: i) hash) hashMultiply].
+ 	^(hash + self size hash) hashMultiply!

Item was added:
+ ----- Method: Array>>hashFastIntervalCompatible (in category 'comparing') -----
+ hashFastIntervalCompatible
+ 	self size = 0 ifTrue: [^self species hash].
+ 	^(self species hash + 
+ 		(((((self at: 1) hash bitShift: 2)
+ 			bitOr: (self at: self size) hash)
+ 			bitShift: 1)
+ 			bitOr: self size)
+ 		) hashMultiply!

Item was changed:
  ----- Method: Interval>>hash (in category 'comparing') -----
  hash
  	"Hash is reimplemented because = is implemented."
  
  	^(((start hash bitShift: 2)
  		bitOr: stop hash)
  		bitShift: 1)
  		bitOr: self size!

Item was added:
+ ----- Method: Interval>>hashBetter (in category 'comparing') -----
+ hashBetter
+ 	"Hash is reimplemented because = is implemented."
+ 
+ 	^(((start hash bitShift: 2)
+ 		bitOr: self last hash)
+ 		bitShift: 1)
+ 		bitOr: self size!

Item was added:
+ ----- Method: Interval>>hashBetterAlsoFixBug3380 (in category 'comparing') -----
+ hashBetterAlsoFixBug3380
+ 	"Hash is reimplemented because = is implemented."
+ 	"Altered so that we has the same as self asArray hash"
+ 	^self inject: Array hash into: [:workingHash :each| (workingHash + each hash) hashMultiply ].!

Item was added:
+ ----- Method: Interval>>hashBetterFastArrayCompatible (in category 'comparing') -----
+ hashBetterFastArrayCompatible
+ 	| hash |
+ 	self size < 48 ifTrue: [^self slowHash]. "Just check every element."
+ 	hash := Array hash.
+ 	1 to: 16 do: [:i| hash := (hash + (self at: i) hash) hashMultiply].
+ 	self size - 15 to: self size do: [:i| hash := (hash + (self at: i) hash) hashMultiply].
+ 	^(hash + self size hash) hashMultiply!

Item was added:
+ ----- Method: Interval>>hashFastArrayCompatible (in category 'comparing') -----
+ hashFastArrayCompatible
+ 	"Hash is reimplemented because = is implemented."
+ 	self size = 0 ifTrue: [^Array hash].
+ 	^(Array hash + 
+ 		((((start hash bitShift: 2)
+ 			bitOr: self last hash)
+ 			bitShift: 1)
+ 			bitOr: self size)
+ 		) hashMultiply!

Item was added:
+ ----- Method: Interval>>hashSlowerBetterAlsoFixBug3380 (in category 'comparing') -----
+ hashSlowerBetterAlsoFixBug3380
+ 	"Hash is reimplemented because = is implemented."
+ 	"Altered so that we has the same as self asArray hash"
+ 	| hash |
+ 
+ 	hash := Array hash.
+ 	1 to: self size do: [:i | hash := (hash + (self at: i) hash) hashMultiply].
+ 	^hash!

Item was added:
+ ----- Method: Interval>>slowHash (in category 'comparing') -----
+ slowHash
+ 	"Hash is reimplemented because = is implemented."
+ 	"Altered so that we has the same as self asArray hash"
+ 	^self inject: Array hash into: [:workingHash :each| (workingHash + each hash) hashMultiply ].!



More information about the Squeak-dev mailing list