import { TTypedArray } from "./t-typed-array.js";
import { ITypedArrayExtensions } from "./i-typed-array-extensions.js";
import { ITypedArrayCtor } from "./i-typed-array-ctor.js";
import { ITypedArrayTupleFactory } from "./i-typed-array-tuple-factory.js";
import { ISharedMemoryBlock } from "../../web-assembly/shared-memory/shared-memory-block.js";
import { IEmscriptenWrapper } from "../../web-assembly/emscripten/i-emscripten-wrapper.js";
import { ATypedArrayTuple } from "./a-typed-array-tuple.js";
import type { IManagedObject, IManagedResourceNode } from "../../lifecycle/manged-resources.js";
import type { IInteropBindings } from "../../web-assembly/emscripten/i-interop-bindings.js";
/**
 * @public
 * Wrapper of block of memory that is the same size as `TArray`. Provides utility functions with stronger typing than
 * {@link ISharedMemoryBlock}.
 */
export interface ISharedTypedArrayTuple<TArray extends (ATypedArrayTuple<number, TTypedArray> & ITypedArrayExtensions)> extends IManagedObject {
    memory: ISharedMemoryBlock;
    copyToBuffer(readFrom: TArray): void;
    copyFromBuffer(writeTo: TArray): void;
}
/**
 * @public
 */
export type TExtendedTypedArrayCtor<TArray extends ATypedArrayTuple<number, TTypedArray>> = ITypedArrayCtor<TArray> & {
    factory: ITypedArrayTupleFactory<any, any>;
};
/**
 @public
 {@inheritDoc ISharedTypedArrayTuple}
 */
export declare class SharedTypedArrayTuple<TArray extends (ATypedArrayTuple<number, TTypedArray> & ITypedArrayExtensions)> implements ISharedTypedArrayTuple<TArray> {
    readonly memory: ISharedMemoryBlock;
    resourceHandle: IManagedResourceNode;
    static createOne<TArray extends (ATypedArrayTuple<number, TTypedArray> & ITypedArrayExtensions)>(typedArrayCtor: TExtendedTypedArrayCtor<TArray>, bindToReference: IManagedResourceNode | null, wrapper: IEmscriptenWrapper<IInteropBindings>): ISharedTypedArrayTuple<TArray>;
    getWrapper(): IEmscriptenWrapper<IInteropBindings>;
    copyToBuffer(readFrom: TArray): void;
    copyFromBuffer(writeTo: TArray): void;
    private constructor();
    private static littleEndian;
}
//# sourceMappingURL=shared-typed-array-tuple.d.ts.map