import { registerSync } from './reconstruct.ts'; export class Int32Atomic { static readonly byteSize = 4; static readonly byteAlignment = 4; private readonly view: Int32Array; constructor(buffer?: SharedArrayBuffer, byteOffset?: number) { const buf = buffer ?? new SharedArrayBuffer(4); const offset = byteOffset ?? 0; this.view = new Int32Array(buf, offset, 1); } load(): number { return Atomics.load(this.view, 0); } store(value: number): void { Atomics.store(this.view, 0, value); } add(value: number): number { return Atomics.add(this.view, 0, value); } sub(value: number): number { return Atomics.sub(this.view, 0, value); } and(value: number): number { return Atomics.and(this.view, 0, value); } or(value: number): number { return Atomics.or(this.view, 0, value); } xor(value: number): number { return Atomics.xor(this.view, 0, value); } exchange(value: number): number { return Atomics.exchange(this.view, 0, value); } compareExchange(expected: number, replacement: number): number { return Atomics.compareExchange(this.view, 0, expected, replacement); } [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { return { tag: 'Int32Atomic', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; } } registerSync('Int32Atomic', Int32Atomic);