Uuid constructor

Uuid({Map<String, dynamic> options })

Implementation

Uuid({Map<String, dynamic> options}) {
  options = (options != null) ? options : new Map();
  _byteToHex = new List<String>(256);
  _hexToByte = new Map<String, int>();

  // Easy number <-> hex conversion
  for (var i = 0; i < 256; i++) {
    var hex = new List<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;
}