Uuid constructor
Implementation
Uuid({Map<String, dynamic> options}) {
options = (options != null) ? options : {};
_byteToHex = List<String>(256);
_hexToByte = <String, int>{};
// Easy number <-> hex conversion
for (var i = 0; i < 256; i++) {
var hex = <int>[];
hex.add(i);
_byteToHex[i] = convert.hex.encode(hex);
_hexToByte[_byteToHex[i]] = i;
}
// Sets initial seedBytes, node, and clock seq based on mathRNG.
var v1PositionalArgs = (options['v1rngPositionalArgs'] != null)
? options['v1rngPositionalArgs']
: [];
var v1NamedArgs = (options['v1rngNamedArgs'] != null)
? options['v1rngNamedArgs'] as Map<Symbol, dynamic>
: const <Symbol, dynamic>{};
_seedBytes = (options['v1rng'] != null)
? Function.apply(options['v1rng'], v1PositionalArgs, v1NamedArgs)
: UuidUtil.mathRNG();
// Set the globalRNG function to mathRNG with the option to set an alternative globally
var gPositionalArgs = (options['grngPositionalArgs'] != null)
? options['grngPositionalArgs']
: [];
var gNamedArgs = (options['grngNamedArgs'] != null)
? options['grngNamedArgs'] as Map<Symbol, dynamic>
: const <Symbol, dynamic>{};
_globalRNG = () {
return (options['grng'] != null)
? Function.apply(options['grng'], gPositionalArgs, gNamedArgs)
: UuidUtil.mathRNG();
};
// Per 4.5, create a 48-bit node id (47 random bits + multicast bit = 1)
_nodeId = [
_seedBytes[0] | 0x01,
_seedBytes[1],
_seedBytes[2],
_seedBytes[3],
_seedBytes[4],
_seedBytes[5]
];
// Per 4.2.2, randomize (14 bit) clockseq
_clockSeq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3ffff;
}