UUID.st
changeset 1467 a394ade68816
parent 1447 210f3ac37991
child 1491 512b21b45a9e
equal deleted inserted replaced
1466:42e823c8db8c 1467:a394ade68816
   277 
   277 
   278     macBytes := self class getValidMACAddress.
   278     macBytes := self class getValidMACAddress.
   279 
   279 
   280     "use 60 bit counter of 100ns ticks since 00:00:00 15.oct 1582 (sigh)"
   280     "use 60 bit counter of 100ns ticks since 00:00:00 15.oct 1582 (sigh)"
   281     Lock critical:[
   281     Lock critical:[
       
   282         SequenceNumber isNil ifTrue:[
       
   283             SequenceNumber := Random nextIntegerBetween:0 and:16383.
       
   284         ].
   282         utcTime := self class getDtssUtcTime.
   285         utcTime := self class getDtssUtcTime.
   283         LastTime < utcTime ifTrue:[
   286         LastTime < utcTime ifTrue:[
   284             Increment := 0.
   287             Increment := 0.
   285         ] ifFalse:[
   288         ] ifFalse:[
   286             LastTime = utcTime ifTrue:[
   289             LastTime = utcTime ifTrue:[
   287                 "clock didn't advance since last call. Simply add a tick"
   290                 "clock didn't advance since last call. Simply add a tick"
   288                 Increment := Increment + 1.
   291                 Increment := Increment + 1.
   289             ] ifFalse:[
   292             ] ifFalse:[
   290                 "clock went backwards increment SequenceNumber"
   293                 "clock went backwards - increment SequenceNumber"
   291                 Increment := 0.
   294                 Increment := 0.
   292                 SequenceNumber := SequenceNumber + 1.
   295                 SequenceNumber := SequenceNumber + 1.
   293                 SequenceNumber >= 16384 ifTrue:[SequenceNumber := 0].
   296                 SequenceNumber >= 16384 ifTrue:[SequenceNumber := 0].
   294             ].
   297             ].
   295         ].
   298         ].
   296         SequenceNumber isNil ifTrue:[
       
   297             SequenceNumber := Random nextIntegerBetween:0 and:16383.
       
   298         ].
       
   299         
   299         
   300 
       
   301         LastTime := utcTime.
   300         LastTime := utcTime.
   302         utcTime := utcTime + Increment.
   301         utcTime := utcTime + Increment.
   303     ].
   302     ].
   304 
   303 
   305     "first 60 bits of timestamp"
   304     "first 60 bits of timestamp"
   361 ! !
   360 ! !
   362 
   361 
   363 !UUID class methodsFor:'documentation'!
   362 !UUID class methodsFor:'documentation'!
   364 
   363 
   365 version
   364 version
   366     ^ '$Header: /cvs/stx/stx/libbasic2/UUID.st,v 1.9 2004-04-30 11:57:37 penk Exp $'
   365     ^ '$Header: /cvs/stx/stx/libbasic2/UUID.st,v 1.10 2004-08-13 13:31:06 stefan Exp $'
   367 ! !
   366 ! !
   368 
   367 
   369 UUID initialize!
   368 UUID initialize!