[squeak-dev] The Inbox: Network-topa.166.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Oct 21 18:26:24 UTC 2015


Tobias Pape uploaded a new version of Network to project The Inbox:
http://source.squeak.org/inbox/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.!



More information about the Squeak-dev mailing list