28 lines
971 B
JavaScript
28 lines
971 B
JavaScript
// Metro module 510 (f511).
|
|
import Integer from "./Integer";
|
|
import { Buffer } from "./Buffer";
|
|
export class IdGenerator {
|
|
constructor() {
|
|
return {
|
|
__proto__: new.target.prototype,
|
|
_randomPrefix: Math.floor(4294967296 * Math.random()) | 0,
|
|
_creationTime: Integer(Date.now()),
|
|
_sequenceNumber: 0
|
|
};
|
|
}
|
|
generate(a0) {
|
|
const r18 = Integer(a0);
|
|
const r20 = +this._sequenceNumber;
|
|
this._sequenceNumber = r20 + 1;
|
|
const r4 = r20 | 0;
|
|
const buffer = new Buffer(24);
|
|
buffer.writeInt32LE(r18.mod(4294967296).toJSNumber() | 0, 0, true);
|
|
buffer.writeInt32LE(r18.shiftRight(32).toJSNumber() | 0, 4, true);
|
|
buffer.writeInt32LE(this._randomPrefix, 8, true);
|
|
buffer.writeInt32LE(this._creationTime.mod(4294967296).toJSNumber() | 0, 12, true);
|
|
buffer.writeInt32LE(this._creationTime.shiftRight(32).toJSNumber() | 0, 16, true);
|
|
buffer.writeInt32LE(r4, 20, true);
|
|
return buffer.toString("base64");
|
|
}
|
|
}
|