UNPKG

lib-utils-ts

Version:

<img src="https://img.shields.io/npm/v/lib-utils-ts"/> <img src="https://img.shields.io/snyk/vulnerabilities/npm/lib-utils-ts"/> <img src="https://img.shields.io/npm/l/lib-utils-ts"/> <img src="https://img.shields.io/github/languages/top/devGnode/lib-util

60 lines (50 loc) 2.13 kB
import assert = require("assert"); import {Byte} from "../primitives/Byte"; import {Convert} from "../primitives/Convert"; export class UUID { private readonly mostSigBits:number; private readonly leastSigBits:number; public constructor(byte:Byte[]) { let msb:number = 0, lsb:number = 0, i:number = 0; assert.strictEqual( byte.length,16, "data must be 16 bytes in length" ); for(; i < 8; i++ )msb = (msb << 8) + (byte[i].valueOf() & 0xff); for(i=8; i < 16; i++ )lsb = (lsb << 8) + (byte[i].valueOf() & 0xff); this.mostSigBits = msb; this.leastSigBits = lsb; } public static UUID():UUID{ let randomBytes:Byte[] = []; for(let i=0; i < 16; i++) randomBytes.push(Byte.random(Byte.mk(0),Byte.mk(255))); randomBytes[6] = Byte.mk(randomBytes[6].valueOf()&0x0f); randomBytes[6] = Byte.mk(randomBytes[6].valueOf()|0x40); randomBytes[8] = Byte.mk(randomBytes[6].valueOf()&0x3f); randomBytes[8] = Byte.mk(randomBytes[6].valueOf()|0x80); return new UUID(randomBytes); } private static of(mostSigBits:number,leastSigBits:number):UUID{ let out:UUID = new UUID([]); (<any>out).leastSigBits = leastSigBits; (<any>out).mostSigBits = mostSigBits; return out; } private static digits(val:number,digits:number):string { let hi:number = 1 * Math.pow(2, (digits * 4)); return Convert.To.hex(hi+(val & (hi - 1))).substring(1); } public equals(o:Object):boolean{ if(o===null||o===undefined||!(o instanceof UUID)) return false; if(this==o)return true; return this.mostSigBits === o.mostSigBits && this.leastSigBits == o.leastSigBits; } public toString():string { return (UUID.digits(this.mostSigBits >> 32, 8) + "-" + UUID.digits(this.mostSigBits >> 16, 4) + "-" + UUID.digits(this.mostSigBits, 4) + "-" + UUID.digits(this.leastSigBits >> 48, 4) + "-" + UUID.digits(this.leastSigBits, 12)); } } Object.package(this);