nextOid function

String nextOid()

Returns the next unique object ID.

Implementation

String nextOid() {
  final bytes = List<int>.filled(oidLength, 0);
  var out = 0;

  // ---- time part (MSB-first) ----
  var time = (DateTime.now().millisecondsSinceEpoch ~/ _msPerTimeUnit) % _maxTimePart;
  for (var i = _lenTimePart, div = _divTimePart; --i >= 0;) {
    final digit = time ~/ div;
    time %= div;
    bytes[out++] = _escOid(digit);
    div ~/= _ccRange;
  }

  // ---- random part ----
  for (;;) {
    var val = _safeRandom.next(); // uniform in [0, _threshold)
    assert(val >= 0);

    for (var j = _charPerInt; --j >= 0;) {
      bytes[out++] = _escOid(val % _ccRange);
      if (out >= oidLength)
        return String.fromCharCodes(bytes);
      val ~/= _ccRange;
    }
  }
}