import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * Represents a storage-level array.
 *
 * We need to track which execution threads/invocations have written to which indices, so that we can (a) ensure that
 * we won't get data races (and will have uniform control flow), and (b) in the future potentially simulate cases where
 * we might get more undefined-like behavior between which values we get.
 *
 * For workgroup-level arrays, we only need to track the local invocation within that workgroup wrote to that index.
 *
 * TODO: for NOW, we'll lock out and fail on reads (if another thread wrote), OR multiple-thread writes, HOWEVER
 * TODO: we should make it possible to return arbitrary results (and track values) for other cases
 *
 * See ParallelExecutor for more high-level documentation.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Vector3 from '../../../dot/js/Vector3.js';
import { BaseWorkgroupValues, ParallelContext } from '../imports.js';
export default class ParallelWorkgroupArray<T> {
    readonly data: T[];
    readonly indeterminateValue: T;
    private readonly writeLocalIDs;
    constructor(data: T[], indeterminateValue: T);
    get<WorkgroupValues extends BaseWorkgroupValues>(context: ParallelContext<WorkgroupValues>, index: number): Promise<T>;
    set<WorkgroupValues extends BaseWorkgroupValues>(context: ParallelContext<WorkgroupValues>, index: number, value: T): Promise<void>;
    synchronize(workgroupId: Vector3): void;
}
//# sourceMappingURL=ParallelWorkgroupArray.d.ts.map