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