blob: 2ebca2dbeb640e72ad8cdd07a6882b8e7a09f89b [file] [log] [blame]
/*
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;
};
}();