Offload functions to worker threads with shared memory primitives for Node.js.
8
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 47 lines 1.4 kB view raw
1import { registerSync } from './reconstruct.ts'; 2 3export class BoolAtomic { 4 static readonly byteSize = 1; 5 static readonly byteAlignment = 1; 6 private readonly view: Uint8Array; 7 8 constructor(buffer?: SharedArrayBuffer, byteOffset?: number) { 9 const buf = buffer ?? new SharedArrayBuffer(1); 10 const offset = byteOffset ?? 0; 11 this.view = new Uint8Array(buf, offset, 1); 12 } 13 14 load(): boolean { 15 return Atomics.load(this.view, 0) !== 0; 16 } 17 18 store(value: boolean): void { 19 Atomics.store(this.view, 0, value ? 1 : 0); 20 } 21 22 and(value: boolean): boolean { 23 return Atomics.and(this.view, 0, value ? 1 : 0) !== 0; 24 } 25 26 or(value: boolean): boolean { 27 return Atomics.or(this.view, 0, value ? 1 : 0) !== 0; 28 } 29 30 xor(value: boolean): boolean { 31 return Atomics.xor(this.view, 0, value ? 1 : 0) !== 0; 32 } 33 34 exchange(value: boolean): boolean { 35 return Atomics.exchange(this.view, 0, value ? 1 : 0) !== 0; 36 } 37 38 compareExchange(expected: boolean, replacement: boolean): boolean { 39 return Atomics.compareExchange(this.view, 0, expected ? 1 : 0, replacement ? 1 : 0) !== 0; 40 } 41 42 [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 43 return { tag: 'BoolAtomic', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 44 } 45} 46 47registerSync('BoolAtomic', BoolAtomic);