The weeb for the next gen discord boat - Wamellow
wamellow.com
bot
discord
1export class Bitfield {
2 constructor(private flags: number) {}
3
4 add(flag: number) {
5 this.flags |= flag;
6 }
7
8 remove(flag: number) {
9 this.flags &= ~flag;
10 }
11
12 has(flag: number) {
13 return (this.flags & flag) === flag;
14 }
15
16 get() {
17 return this.flags;
18 }
19
20 toArray() {
21 const flags: number[] = [];
22 let field = this.flags;
23 let bit = 1;
24
25 while (field > 0) {
26 if (field & bit) {
27 flags.push(bit);
28 field -= bit;
29 }
30 bit <<= 1;
31 }
32
33 return flags;
34 }
35}
36
37export function bitfieldToArray(bitfield: Record<string | number, string | number>) {
38 return Object.entries(bitfield)
39 .filter(([_, value]) => typeof value === "number")
40 .map(([name, value]) => ({
41 name: name.replace(/[a-z][A-Z]/g, (s) => s[0] + " " + s[1]),
42 value
43 }));
44}
45
46export function arrayToBitfield(array: (number | string)[], obj: Record<string | number, string | number>, flags: number) {
47 const bits = array
48 .map(Number)
49 .reduce((a, b) => a | b, 0);
50
51 const mask = Object.values(obj)
52 .filter((v): v is number => typeof v === "number")
53 .reduce((a, b) => a | b, 0);
54
55 return (flags & ~mask) | bits;
56}
57
58export function transformer(value: boolean, flags: number, flag: number) {
59 return value ? flags | flag : flags & ~flag;
60}