nextOid function
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;
}
}
}