The weeb for the next gen discord boat - Wamellow wamellow.com
bot discord
at master 50 lines 1.1 kB view raw
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}