#TUNING by stefan
class: UUID
class definition
added: #fromString:
changed: #initialize
cache symbolic UUIDs
--- a/UUID.st Thu Apr 14 12:53:36 2016 +0200
+++ b/UUID.st Tue Apr 19 14:57:11 2016 +0200
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"
COPYRIGHT (c) 2002 by eXept Software AG
All Rights Reserved
@@ -18,7 +16,7 @@
ByteArray variableByteSubclass:#UUID
instanceVariableNames:''
classVariableNames:'CachedMACAddress Lock SequenceNumber LastTime Increment
- NameSpaceToUuidBytes'
+ NameSpaceToUuidBytes CachedUuidsBySymbol'
poolDictionaries:''
category:'Net-Communication-Support'
!
@@ -74,6 +72,7 @@
Lock := RecursionLock new name:#UUID.
LastTime := 0.
Increment := 0.
+ CachedUuidsBySymbol := IdentityDictionary new.
]
!
@@ -198,6 +197,43 @@
"
!
+fromString:aStringOrSymbol
+ "convert aStringOrSymbol to a UUID.
+ If aStringOrSymbol is a symbol, cache this UUID for faster conversion.
+
+ The real conversion is done in #readFrom:onError."
+
+ |isSymbol uuid|
+
+ isSymbol := aStringOrSymbol isSymbol.
+ isSymbol ifTrue:[
+ uuid := CachedUuidsBySymbol at:aStringOrSymbol ifAbsent:[].
+ uuid notNil ifTrue:[^ uuid].
+ ].
+ uuid := self readFrom:aStringOrSymbol readStream.
+ isSymbol ifTrue:[
+ CachedUuidsBySymbol at:aStringOrSymbol put:uuid.
+ ].
+ ^ uuid.
+
+ "
+ UUID fromString:'be1ef7a0-ae1d-11e0-9cb5-02ff7d4f61ea'
+ UUID fromString:#'be1ef7a0-ae1d-11e0-9cb5-02ff7d4f61ea'
+
+ Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ UUID fromString:'be1ef7a0-ae1d-11e0-9cb5-02ff7d4f61ea'.
+ ]
+ ]
+
+ Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ UUID fromString:#'be1ef7a0-ae1d-11e0-9cb5-02ff7d4f61ea'.
+ ]
+ ]
+ "
+!
+
genRandomUUID
"generate a new random UUID"
@@ -432,6 +468,7 @@
"Modified: / 17-11-2004 / 01:45:53 / cg"
! !
+
!UUID methodsFor:'accessing'!
clockSeqHiAndReserved