Tobias Pape uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-topa.166.mcz
==================== Summary ====================
Name: Network-topa.166 Author: topa Time: 21 October 2015, 8:26:14.656 pm UUID: d6d9910f-fa67-4c69-9a89-030c81233e90 Ancestors: Network-topa.165
UUIDGenerator - Use new Random>>#nextBytes:into:startingAt: (needs Kernel-ul.960) for even more speed - Fix UUIDGenerator class>>#initialize to correctly register at startup - Do not reset default on startup but rather reseed TheRandom
Timings improved: '1,190,000 per second. 842 nanoseconds per run.' (0.25 times slower than primitive version)
=============== Diff against Network-topa.165 ===============
Item was changed: Object subclass: #UUIDGenerator + instanceVariableNames: '' - instanceVariableNames: 'bits' classVariableNames: 'Default TheRandom TheSemaphore' poolDictionaries: '' category: 'Network-UUID'!
!UUIDGenerator commentStamp: 'topa 10/19/2015 23:23:19' prior: 0! I generate a pseudo-random UUID by asking Random for a 128 bit value.
See https://tools.ietf.org/html/rfc4122.html#section-4.4 for reference.!
Item was changed: ----- Method: UUIDGenerator class>>default (in category 'instance creation') ----- default + ^ Default ifNil: [Default := self new] + ! - Default ifNil: [self generateDefault]. - ^Default!
Item was removed: - ----- Method: UUIDGenerator class>>generateDefault (in category 'instance creation') ----- - generateDefault - Default := self new!
Item was changed: ----- Method: UUIDGenerator class>>initialize (in category 'class initialization') ----- initialize TheRandom := Random new. TheSemaphore := Semaphore forMutualExclusion. + Smalltalk addToStartUpList: self! - Smalltalk addToStartUpList: self after: nil.!
Item was added: + ----- Method: UUIDGenerator class>>resetDefault (in category 'class initialization') ----- + resetDefault + Default := nil.!
Item was changed: ----- Method: UUIDGenerator class>>startUp (in category 'class initialization') ----- startUp + "Reseed the random" + TheSemaphore critical: [TheRandom seed: nil].! - Default := nil!
Item was added: + ----- Method: UUIDGenerator>>fillRandomly: (in category 'instance creation') ----- + fillRandomly: aUUID + + TheSemaphore critical: [ + TheRandom nextBytes: 16 "128 bit" into: aUUID startingAt: 1].!
Item was changed: ----- Method: UUIDGenerator>>generateBytes:forVersion: (in category 'instance creation') ----- + generateBytes: aUUID forVersion: aVersion + | versionID fixedValue | + + aVersion = 4 ifFalse: [^ self error: 'Unsupported version']. + + self fillRandomly: aUUID. + versionID := ((aUUID at: 7) bitAnd: 16r0F) bitOr: 16r40. "Version 4" + fixedValue := ((aUUID at: 9) bitAnd: 16r3F) bitOr: 16r80. "Fixed 8..b value" + aUUID + at: 7 put: versionID; + at: 9 put: fixedValue.! - generateBytes: aPlaceHolder forVersion: aVersion - aVersion = 4 ifTrue: [self generateFieldsVersion4] - ifFalse: [self error: 'Unsupported version']. - self placeFields: aPlaceHolder.!
Item was removed: - ----- Method: UUIDGenerator>>generateFieldsVersion4 (in category 'instance creation') ----- - generateFieldsVersion4 - - TheSemaphore critical: [ - bits := 16rffffffffffffffffffffffffffffffff atRandom: TheRandom. "128 bit"].!
Item was removed: - ----- Method: UUIDGenerator>>placeFields: (in category 'instance creation') ----- - placeFields: aByteArray - - | version fixed | - bits isLarge - ifTrue: [ aByteArray replaceFrom: 1 to: bits size with: bits] - ifFalse: [aByteArray unsignedLongAt: 1 put: bits bigEndian: false]. - - version := ((aByteArray at: 7) bitAnd: 16r0F) bitOr: 16r40. "Version 4" - fixed := ((aByteArray at: 9) bitAnd: 16r3F) bitOr: 16r80. "Fixed 8..b value" - aByteArray - at: 7 put: version; - at: 9 put: fixed.!
squeak-dev@lists.squeakfoundation.org