Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / helpers / bitset.ts
blob855b9c67e81c194414de4ad5b2c90cae5cd26c98
1 /**
2  * Set bit on the number
3  */
4 export const setBit = (number = 0, mask: number): number => number | mask;
6 /**
7  * Toggle a bit from the number
8  */
9 export const toggleBit = (number = 0, mask: number): number => number ^ mask;
11 /**
12  * Clear a bit from the number
13  */
14 export const clearBit = (number = 0, mask: number): number => number & ~mask;
16 /**
17  * Check if a bit is set in the number
18  */
19 export const hasBit = (number = 0, mask: number): boolean => (number & mask) === mask;
21 export const hasBitBigInt = (number = BigInt(0), mask: bigint): boolean => (number & BigInt(mask)) === BigInt(mask);
23 /**
24  * Get all bits which are toggled on in the respective bitmap
25  */
26 export const getBits = (bitmap: number) => {
27     const size = Math.floor(Math.log2(bitmap)) + 1;
29     const bits: number[] = [];
31     for (let i = 0; i <= size; i++) {
32         const bit = 2 ** i;
34         if (hasBit(bitmap, bit)) {
35             bits.push(bit);
36         }
37     }
39     return bits;