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