1import { BitWidth } from './bit-width' 2 3export function toByteWidth(bitWidth: BitWidth): number { 4 return 1 << bitWidth; 5} 6 7export function iwidth(value: number | bigint): BitWidth { 8 if (value >= -128 && value <= 127) return BitWidth.WIDTH8; 9 if (value >= -32768 && value <= 32767) return BitWidth.WIDTH16; 10 if (value >= -2147483648 && value <= 2147483647) return BitWidth.WIDTH32; 11 return BitWidth.WIDTH64; 12} 13 14export function fwidth(value: number): BitWidth { 15 return value === Math.fround(value) ? BitWidth.WIDTH32 : BitWidth.WIDTH64; 16} 17 18export function uwidth(value: number): BitWidth { 19 if (value <= 255) return BitWidth.WIDTH8; 20 if (value <= 65535) return BitWidth.WIDTH16; 21 if (value <= 4294967295) return BitWidth.WIDTH32; 22 return BitWidth.WIDTH64; 23} 24 25export function fromByteWidth(value: number): BitWidth { 26 if (value === 1) return BitWidth.WIDTH8; 27 if (value === 2) return BitWidth.WIDTH16; 28 if (value === 4) return BitWidth.WIDTH32; 29 return BitWidth.WIDTH64; 30} 31 32export function paddingSize(bufSize: number, scalarSize: number): number { 33 return (~bufSize + 1) & (scalarSize - 1); 34}