protobuf codec with static type inference
jsr.io/@mary/protobuf
typescript
jsr
1export type BitSet = number | number[];
2
3export const setBit = (bits: BitSet, index: number): BitSet => {
4 if (typeof bits !== 'number') {
5 const idx = index >> 5;
6
7 for (let i = bits.length; i <= idx; i++) {
8 bits.push(0);
9 }
10
11 bits[idx] |= 1 << index % 32;
12 return bits;
13 } else if (index < 32) {
14 return bits | (1 << index);
15 } else {
16 return setBit([bits, 0], index);
17 }
18};
19
20export const getBit = (bits: BitSet, index: number): number => {
21 if (typeof bits === 'number') {
22 return index < 32 ? (bits >>> index) & 1 : 0;
23 } else {
24 return (bits[index >> 5] >>> index % 32) & 1;
25 }
26};