| /* |
| Copyright (c) 2004-2006, The Dojo Foundation |
| All Rights Reserved. |
| |
| Licensed under the Academic Free License version 2.1 or above OR the |
| modified BSD license. For more information on Dojo licensing, see: |
| |
| http://dojotoolkit.org/community/licensing.shtml |
| */ |
| |
| dojo.provide("dojo.uuid.LightweightGenerator"); |
| |
| /* |
| * summary: |
| * The LightweightGenerator is intended to be small and fast, |
| * but not necessarily good. |
| * |
| * description: |
| * Small: The LightweightGenerator has a small footprint. |
| * Once comments are stripped, it's only about 25 lines of |
| * code, and it doesn't dojo.require() any other packages. |
| * |
| * Fast: The LightweightGenerator can generate lots of new |
| * UUIDs fairly quickly (at least, more quickly than the other |
| * dojo UUID generators). |
| * |
| * Not necessarily good: We use Math.random() as our source |
| * of randomness, which may or may not provide much randomness. |
| */ |
| |
| dojo.uuid.LightweightGenerator = new function() { |
| var HEX_RADIX = 16; |
| |
| function _generateRandomEightCharacterHexString() { |
| // Make random32bitNumber be a randomly generated floating point number |
| // between 0 and (4,294,967,296 - 1), inclusive. |
| var random32bitNumber = Math.floor( (Math.random() % 1) * Math.pow(2, 32) ); |
| var eightCharacterHexString = random32bitNumber.toString(HEX_RADIX); |
| while (eightCharacterHexString.length < 8) { |
| eightCharacterHexString = "0" + eightCharacterHexString; |
| } |
| return eightCharacterHexString; // for example: "3B12F1DF" |
| } |
| |
| this.generate = function(/* constructor? */ returnType) { |
| // summary: |
| // This function generates random UUIDs, meaning "version 4" UUIDs. |
| // description: |
| // A typical generated value would be something like this: |
| // "3b12f1df-5232-4804-897e-917bf397618a" |
| // returnType: The type of object to return. Usually String or dojo.uuid.Uuid |
| |
| // examples: |
| // var string = dojo.uuid.LightweightGenerator.generate(); |
| // var string = dojo.uuid.LightweightGenerator.generate(String); |
| // var uuid = dojo.uuid.LightweightGenerator.generate(dojo.uuid.Uuid); |
| var hyphen = "-"; |
| var versionCodeForRandomlyGeneratedUuids = "4"; // 8 == binary2hex("0100") |
| var variantCodeForDCEUuids = "8"; // 8 == binary2hex("1000") |
| var a = _generateRandomEightCharacterHexString(); |
| var b = _generateRandomEightCharacterHexString(); |
| b = b.substring(0, 4) + hyphen + versionCodeForRandomlyGeneratedUuids + b.substring(5, 8); |
| var c = _generateRandomEightCharacterHexString(); |
| c = variantCodeForDCEUuids + c.substring(1, 4) + hyphen + c.substring(4, 8); |
| var d = _generateRandomEightCharacterHexString(); |
| var returnValue = a + hyphen + b + hyphen + c + d; |
| returnValue = returnValue.toLowerCase(); |
| if (returnType && (returnType != String)) { |
| returnValue = new returnType(returnValue); |
| } |
| return returnValue; |
| }; |
| }(); |