Eliot Miranda uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-eem.907.mcz
==================== Summary ====================
Name: Collections-eem.907 Author: eem Time: 6 August 2020, 12:51:46.481296 pm UUID: 4ea594f7-b7bf-4d48-9e7e-2e7cb3af5e70 Ancestors: Collections-mt.906
2.7x faster ByteArray>>readHexFrom:
=============== Diff against Collections-mt.906 ===============
Item was changed: ----- Method: ByteArray>>readHexFrom: (in category 'initialize') ----- readHexFrom: aStream "Initialize the receiver from a hexadecimal string representation" + + 1 to: self size do: + [:i| | n v1 v2 | + n := aStream next asInteger. + v1 := n > 57 "$9 asInteger = 57" + ifTrue: + [n > 96 "$a asInteger 97" + ifTrue: [n - 87] + ifFalse: [n > 64 "$A asInteger = 65" + ifTrue: [n - 55] + ifFalse: [-1]]] + ifFalse: [n - 48]. "$0 asInteger = 48" + (v1 between: 0 and: 15) ifFalse: [^self error: 'Hex digit expected']. + n := aStream next asInteger. + v2 := n > 57 "$9 asInteger = 57" + ifTrue: + [n > 96 "$a asInteger 97" + ifTrue: [n - 87] + ifFalse: [n > 64 "$A asInteger = 65" + ifTrue: [n - 55] + ifFalse: [-1]]] + ifFalse: [n - 48]. "$0 asInteger = 48" + (v2 between: 0 and: 15) ifFalse: [^self error: 'Hex digit expected']. + self at: i put: (v1 bitShift: 4) + v2] + + "Proof that our filter selects only hexadecimal characters: + (0 to: 255) + select: + [:n| + (n > 57 + ifTrue: + [n > 96 + ifTrue: [n - 87] + ifFalse: [n > 64 + ifTrue: [n - 55] + ifFalse: [-1]]] + ifFalse: [n - 48]) between: 0 and: 15] + thenCollect: + [:n| Character value: n]"! - | map v ch value | - map := '0123456789abcdefABCDEF'. - 1 to: self size do:[:i| - ch := aStream next. - v := (map indexOf: ch) - 1. - ((v between: 0 and: 15) or: [((v:= v - 6) between: 0 and: 15)]) ifFalse:[^self error: 'Hex digit expected']. - value := v bitShift: 4. - ch := aStream next. - v := (map indexOf: ch) - 1. - ((v between: 0 and: 15) or: [((v:= v - 6) between: 0 and: 15)]) ifFalse:[^self error: 'Hex digit expected']. - value := value + v. - self at: i put: value. - ]. - !
packages@lists.squeakfoundation.org