import { IEmscriptenWrapper } from "../emscripten/i-emscripten-wrapper.js";
import { type IManagedObject, type IManagedResourceNode, type IPointer } from "../../lifecycle/manged-resources.js";
import { TTypedArrayCtor } from "../../array/typed-array/t-typed-array-ctor.js";
import type { IBuffer } from "../../array/typed-array/i-buffer-view.js";
import { ENumberIdentifier } from "../../runtime/rtti-interop.js";
import type { IInteropBindings } from "../emscripten/i-interop-bindings.js";
/**
 * @public
 * Provides a view into shared memory, which avoids the need to keep recreating shared arrays. The view is NOT owning.
 */
export interface ISharedBufferView<TCtor extends TTypedArrayCtor> extends IManagedObject, IPointer, IBuffer<TCtor> {
    readonly ctor: TCtor;
}
/**
 * @public
 * {@inheritDoc ISharedBufferView}
 */
export declare class SharedBufferView<TCtor extends TTypedArrayCtor> implements ISharedBufferView<TCtor> {
    protected readonly wrapper: IEmscriptenWrapper<IInteropBindings>;
    readonly ctor: TCtor;
    readonly resourceHandle: IManagedResourceNode;
    readonly pointer: number;
    readonly byteSize: number;
    readonly numberId: ENumberIdentifier;
    getWrapper(): IEmscriptenWrapper<IInteropBindings>;
    getSharedObjectHandle(): IManagedObject | null;
    getDataView(): DataView;
    getArray(): InstanceType<TCtor>;
    constructor(wrapper: IEmscriptenWrapper<IInteropBindings>, owner: IManagedResourceNode | null, ctor: TCtor, pointerToData: number, byteSize: number);
    private readonly impl;
}
//# sourceMappingURL=shared-buffer-view.d.ts.map